【问题标题】:Unit testing with ASP.NET Web Api使用 ASP.NET Web Api 进行单元测试
【发布时间】:2015-11-09 09:46:20
【问题描述】:
我有一个大型 SPA 应用程序,它使用 Asp.net Web API 作为后端,使用 angularjs 作为前端,具有存储库模式、UOW 和使用 EntityFramework。 Api 控制器也是可测试的。现在,我想编写一些单元测试来测试所有 api 控制器。
现在的问题是我应该使用假存储库和 DataContext 进行单元测试还是使用实际数据库来实现此目的?
其中哪一个是更好的解决方案?还是有其他方法?
谢谢
【问题讨论】:
标签:
unit-testing
asp.net-web-api
repository-pattern
【解决方案1】:
答案(通常情况下)是“视情况而定”。这取决于几件事;
这取决于您要达到的目标、运行所有 UT 需要多长时间、资金、系统构建方式等等...
在我的其余回答中,我将忽略大部分问题。
如果你的控制器有一个你想要验证的逻辑(行为),你应该注入一个假的存储库(SoC、SRP 等等......这使它成为一个“单元”)。
如果您想验证整个控制器是否按预期运行(组件测试),那么您应该使用真实存储库(在某些情况下您想使用假存储库...)。
通常我的控制器充当Gateway 而没有任何BL,因此我只有针对它们的组件/集成测试。
我的底线是:对于您的问题没有最佳解决方案,这取决于几件事......
this答案的第一段可能对你有帮助(测试金字塔)
【解决方案2】:
根据定义,单元测试是一种自动化测试,它独立于其依赖项运行一个单元。因此,如果你想进行单元测试,你必须用测试替身(存根、模拟、假货等)替换所有依赖项。
还有其他类型的测试。 集成测试,例如,练习几个相互集成的单元。这可能包括一个数据库。
什么时候应该选择哪个?根据经验,我建议根据Test Pyramid 进行测试。
【解决方案3】:
如果您想真正测试您的控制器,您应该针对真实数据库进行测试。
您不应该对控制器进行单元测试,因为其中不应该包含真正的业务逻辑。