小编Dav*_*iff的帖子

什么是进行集成测试的好方法?

我们编写了自己的集成测试工具,我们可以编写一些"操作"或测试,例如"GenerateOrders".我们可以使用许多参数来配置测试(例如订单数量).然后我们编写第二个操作来确认测试已通过/失败(即有(nt)个订单).

该工具用于

  • 集成测试
  • 数据生成
  • 端到端测试(通过混合和匹配多个测试)

它似乎运行良好,但需要开发经验来维护和编写新的测试.我们的测试团队希望参与进来,他们几乎没有C#开发经验.

我们即将开始一个新的Greenfield项目,我正在研究编写和维护集成测试的最佳方法.

问题如下:

  • 你如何进行集成测试?
  • 你使用什么工具(FitNess?,Custom?,NUnit)?

我期待着各国人民的建议/意见.

提前致谢,

大卫

.net c# integration-testing

24
推荐指数
1
解决办法
1万
查看次数

.NET中的DateTime溢出

我们有一个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中的一个错误?这是预期的行为吗?

.net c# datetime parsing date

12
推荐指数
1
解决办法
392
查看次数

实体框架 LoaderExceptions 无法加载一种或多种请求的类型

我有一个使用实体框架的 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)

entity-framework

4
推荐指数
1
解决办法
1万
查看次数

Moq - 订购设置(期望)

我是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 unit-testing moq

4
推荐指数
1
解决办法
2217
查看次数

还有一些你无法测试的东西?

在进行单元测试时,总是很难知道你的框架有多低.

如果我们有一个直接依赖于.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"类!

其他人的想法是什么?

frameworks unit-testing

2
推荐指数
1
解决办法
443
查看次数