【问题标题】: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 需要多长时间、资金、系统构建方式等等...

    在我的其余回答中,我将忽略大部分问题。

    如果你的控制器有一个你想要验证的逻辑(行为),你应该注入一个假的存储库(SoCSRP 等等......这使它成为一个“单元”)。

    如果您想验证整个控制器是否按预期运行(组件测试),那么您应该使用真实存储库(在某些情况下您想使用假存储库...)。

    通常我的控制器充当Gateway 而没有任何BL,因此我只有针对它们的组件/集成测试。

    我的底线是:对于您的问题没有最佳解决方案,这取决于几件事......

    this答案的第一段可能对你有帮助(测试金字塔)

    【讨论】:

      【解决方案2】:

      根据定义,单元测试是一种自动化测试,它独立于其依赖项运行一个单元。因此,如果你想进行单元测试,你必须用测试替身(存根、模拟、假货等)替换所有依赖项。

      还有其他类型的测试。 集成测试,例如,练习几个相互集成的单元。这可能包括一个数据库。

      什么时候应该选择哪个?根据经验,我建议根据Test Pyramid 进行测试。

      【讨论】:

        【解决方案3】:

        如果您想真正测试您的控制器,您应该针对真实数据库进行测试。

        您不应该对控制器进行单元测试,因为其中不应该包含真正的业务逻辑。

        【讨论】:

          猜你喜欢
          • 2013-11-09
          • 1970-01-01
          • 2015-09-17
          • 1970-01-01
          • 2012-03-18
          • 1970-01-01
          • 2023-02-24
          • 2018-12-23
          • 2013-01-19
          相关资源
          最近更新 更多