我们编写了自己的集成测试工具,我们可以编写一些"操作"或测试,例如"GenerateOrders".我们可以使用许多参数来配置测试(例如订单数量).然后我们编写第二个操作来确认测试已通过/失败(即有(nt)个订单).
该工具用于
它似乎运行良好,但需要开发经验来维护和编写新的测试.我们的测试团队希望参与进来,他们几乎没有C#开发经验.
我们即将开始一个新的Greenfield项目,我正在研究编写和维护集成测试的最佳方法.
问题如下:
我期待着各国人民的建议/意见.
提前致谢,
大卫
我们有一个Scala/Java后端,它DateTime.MaxValue在.NET中生成相当于的东西.
我被发送以下日期作为字符串"9999-12-31T23:59:59.999999999Z".
如果我使用DateTime.TryParse("9999-12-31T23:59:59.999999999Z", out var dateTime),则抛出一个ArgumentOutOfRangeException(添加或减去的值导致不可表示的DateTime.Parameter name:value).
我没想到这个,因为我打电话给Try Parse.也许返回虚假会更直观吗?
如果我减少这一年,我可以看到.NET将日期推迟到第二天,这显然不会在最大日期/时间工作!
DateTime.TryParse("9998-12-31T23:59:59.999999999Z", out var dateTime);
dateTime.ToString().Dump();
Run Code Online (Sandbox Code Playgroud)
输出:01/01/9999 00:00:00
如果我将ms的精度降低2,那么它可以工作:
DateTime.TryParse("9998-12-31T23:59:59.9999999Z", out var dateTime);
dateTime.ToString().Dump();
Run Code Online (Sandbox Code Playgroud)
产出:31/12/9998 23:59:59
这真的看起来像.NET中的一个错误?这是预期的行为吗?
我有一个使用实体框架的 Web 服务。当发布到测试环境时,我收到以下错误:
“无法加载一种或多种请求的类型。” - 下面的堆栈跟踪...
测试盒安装了.NET 3.5 SP 1,我已经在这里阅读了之前的帖子:
错误消息“无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。
然而,答案并不能解决我的情况。我已将开发计算机上的工作副本复制并粘贴到测试盒上,以确保调试 DLL 不存在问题(如答案所示),但运气不佳。
这是一个已知的问题?我花了整个早上尝试调试这个!如果有人知道解决方案,请告诉我!
Retrieve the LoaderExceptions property for more information. at System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark)
at System.Reflection.Assembly.GetTypes()
at System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadTypesFromAssembly(LoadingContext context)
at System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.InternalLoadAssemblyFromCache(LoadingContext context)
at System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadAssemblyFromCache(Assembly assembly, Boolean loadReferencedAssemblies, Dictionary`2 knownAssemblies, Dictionary`2& typesInLoading, List`1& errors)
at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection, Assembly assembly, Boolean loadReferencedAssemblies)
at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyForType(Type type)
at System.Data.Metadata.Edm.MetadataWorkspace.LoadAssemblyForType(Type type, Assembly callingAssembly)
at System.Data.Objects.ObjectContext.CreateQuery[T](String queryString, ObjectParameter[] parameters)
at Company.Domain.ICommuicationsEntities.CreateQuery[T](String queryString, ObjectParameter[] parameters)
at Comany.EntityFrameworkRepository`1.GetQuery()
at Comany.Repositories.EntityFrameworkRepository`1.GetFiltered(Expression`1 filter, IncludeBuilder`1 includeBuilder)
at Comany.Repositories.EntityFrameworkRepository`1.GetFiltered(Expression`1 …Run Code Online (Sandbox Code Playgroud) 我是Moq的新手,无法确定我如何订购设置.我有以下代码:
_orderRepository.Setup(r => r.Update(It.Is<Order>(a => ((int)a.OrderStatusReference.EntityKey.EntityKeyValues[0].Value) == 2)))
.Throws(exception)
.AtMost(5);
Run Code Online (Sandbox Code Playgroud)
我想要执行5次(如果更新失败,则重试逻辑).在第5次之后我想设置并期望它成功(不抛出异常):
_orderRepository.Setup(r => r.Update(It.Is<Order>(a => ((int)a.OrderStatusReference.EntityKey.EntityKeyValues[0].Value) == 2))).AtMostOnce();
Run Code Online (Sandbox Code Playgroud)
不幸的是,它继续使用第一个代码示例,并且从未成功更新.
如果我没有使用Throws方法,那么我可以使用Callback方法,但是在throw之后它不可用:(.
如果有办法或者这是Moq的限制吗?
在进行单元测试时,总是很难知道你的框架有多低.
如果我们有一个直接依赖于.NET Framework的类,即System.IO.File类,那么我们真的无法单独测试它.
当然我们可以将它包装并将其注入依赖类,但随后我们开始包装每个.NET类!如果那个包装不是直接通话怎么办?也许它首先做一些检查/业务逻辑,你想要测试?
目前我们已经包装到一定程度,然后就不用费心单元测试那个包装器了.也许这没关系,因为它将在稍后通过集成和探索性测试进行测试?
这是C#中的一个例子,只是为了说明我的观点:
这个类与.NET Framework紧密耦合..很好,但是现在我不能单独测试它,它需要文件存在等等.
public class PathResolver
{
public string Resolve(string filename)
{
string completePath = string.Empty;
if(!File.Exists(filename))
{
return Path.Combine(@"D:\MyExample", filename);
}
return completePath;
}
}
Run Code Online (Sandbox Code Playgroud)
我们可以通过以下方式对此进行单元测试:
public class PathResolver
{
private readonly IFileSystem _fileSystem;
public PathResolver(IFileSystem fileSystem)
{
_fileSystem = fileSystem;
}
public string Resolve(string filename)
{
string completePath = string.Empty;
if(!_fileSystem.Exists(filename))
{
return _fileSystem.Combine(@"D:\MyExample", filename);
}
return completePath;
}
}
Run Code Online (Sandbox Code Playgroud)
但现在我们无法测试"FileSystem"类!
其他人的想法是什么?