Angular单元测试和集成测试

4

最近我开始为我正在开发的angular应用编写单元测试。

有一件事我不太确定,就是在Angular环境下单元测试和集成测试之间的差异。

假设我要测试一个依赖于另一个(非angular)服务的控制器,那么我应该创建一个服务的模拟还是尽可能使用真实服务。

如果我注入服务本身,这难道不意味着我在创建一个集成测试而不是一个单元测试吗?

我问这个问题是因为我的同事们一直在编写将真实服务注入并称其为单元测试的测试。当你必须调试测试中注入服务的错误时,这真的很糟糕,特别是每个服务都依赖于其他5个服务...


根据我的经验,Angular的测试(Jasmine/Mocha)涉及注入“真实”的服务,但是您的单元测试将使用所需的任何交互“存根”其行为。您可以使用$provide来模拟这些依赖项作为整体,但通常当您需要多个服务时,只需注入真实内容并使用“存根”来定义测试的行为即可。单元测试最大的敌人是服务内部的“状态”,您需要尽可能少地在服务内部维护它。 - FrailWords
1个回答

7

单元测试的目的是验证基本单元在与环境和其他单元隔离的情况下的行为。如果你的被测试系统或测试本身与外部系统交互,那么这并不是真正的单元测试。

几个月前,我写了一篇关于这个主题的文章。欢迎查看获取更多信息。


1
谢谢。你的回答非常有帮助,也证实了我的想法。此外,这篇文章真的很酷和有趣。 - Łukasz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接