[英]Spring boot REST application testing approach
我有一个Spring启动+ REST应用程序。 当我需要编写单元测试时,我应该直接调用服务bean还是调用其余的控制器? 如果我直接调用其余的控制器,我必须使用RestTemplate并调用其余的api作为客户端,对吧?
什么是最好的和必要的练习?
如果我直接调用服务bean,它将导致更少的代码覆盖率,因为控制器方法代码将不会被覆盖。 那可以接受吗?
嗯,这是一个复杂的问题,但我会尽我所能回答。 这很大程度上取决于您/您组织的风险承受能力以及他们希望投入测试的时间。 我相信很多测试,但有太多这样的事情。
单元测试测试代码单元。 很棒,但是什么是单位? 这篇文章是一个非常好的讨论: http : //martinfowler.com/bliki/UnitTest.html但是一个单元基本上是你应用程序中最小的可测试部分。
许多文献(例如https://www.amazon.ca/Continuous-Delivery-Reliable-Deployment-Automation/dp/0321601912/ )描述了多个测试阶段,包括非常低级别的单元测试和模拟外部性,如DB或文件系统或远程系统,以及“api验收测试”(有时称为集成测试,尽管这是一个含糊不清的术语,可能意味着其他事情)。 后一种类型会激活应用程序的测试实例,调用API并对响应进行断言。
简短的回答如下:对于单元测试,关注单元(可能是服务或更细粒度),但是您描述的另一组测试,其中测试行为类似于客户端并调用您的API,也是值得的。 我的建议:做两件事,但不要同时进行单元测试。
它基于您想要测试的内容,您可以分离您的测试,特别是如果您有开发人员团队,测试用例来测试您的业务“服务”,另一个测试用例作为集成测试来使用REST模板,在这种情况下你可以更快更容易地找出你的错误。
这取决于你想做什么。
一种方法是对工作单元进行单元测试,例如服务和MVC控制器。 这些测试仅测试此类中的最终逻辑,并尝试达到高分支覆盖(如果适用)。 除此之外,您还可以编写一个集成测试来发出HTTP请求,转到真正的服务bean,并且只模拟最终的资源访问。
对于集成测试,您可以使用Spring的支持,请参见此处: http : //docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#spring-mvc-test-framework
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.