C# 单元测试,大型装置/夹具
假设我们有一个C# 单元测试,大型装置/夹具,c#,unit-testing,moq,xunit,C#,Unit Testing,Moq,Xunit,假设我们有一个服务,其他服务在DI上。被测试的方法对输入数据进行一些处理,进行一些验证,调用一些注入的服务(只能获取数据或修改数据,然后返回一些内容),然后返回一些内容 考虑到这个场景,我需要编写许多案例来测试所有可能的行为,比如验证异常、未发现异常、业务异常、正常流等等 问题是,我需要为安装模拟注入服务上的所有方法。这可能会快速增长 在这种大型/复杂的方法中,夹具和设置(模拟依赖项)的最佳方法是什么?有解决这个问题的模式吗? 对于数据模拟,我使用了builder模式,它可以很好地简化任务。您应
服务
,其他服务在DI
上。被测试的方法对输入数据进行一些处理,进行一些验证,调用一些注入的服务(只能获取数据或修改数据,然后返回一些内容),然后返回一些内容
考虑到这个场景,我需要编写许多案例来测试所有可能的行为,比如验证异常、未发现异常、业务异常、正常流等等
问题是,我需要为安装模拟注入服务上的所有方法。这可能会快速增长
在这种大型/复杂的方法中,夹具和设置(模拟依赖项)的最佳方法是什么?有解决这个问题的模式吗?
对于数据模拟,我使用了
builder模式
,它可以很好地简化任务。您应该尝试创建独立的类,您可以在不引入太多依赖项的情况下进行测试,但在某些情况下,会有一个类使用其他组件(例如ViewModel)。在这种情况下,我使用:
它有助于创建测试中的系统/类,并有助于注入依赖项。您可以将它与NSubstitute一起使用,但不能仅与它一起使用
使用AutoFixture,您可以创建您将要检查的模拟类,但AutoFixture将自动为您生成不需要的rest依赖项,因此扩展构造函数不会导致修改大量单元测试。该方法似乎做得太多了。将其拆分为多个可测试的方法。当您有许多依赖项时,您肯定需要对它们进行许多模拟。这就是为什么你应该让你的单元在测试中保持小规模。但并非所有方法都是可拆分的。此外,如果拆分完成,那么测试调用这些较小方法的“管弦乐队”方法如何?