Spring启动REST应用程序测试方法

时间:2016-07-04 17:31:37

标签: java spring rest junit spring-boot

我有一个Spring启动+ REST应用程序。当我需要编写单元测试时,我应该直接调用服务bean还是调用其余的控制器?如果我直接调用其余的控制器,我必须使用RestTemplate并调用其余的api作为客户端,对吗?

最佳和必需的练习是什么?

如果我直接调用服务bean,它将导致更少的代码覆盖率,因为控制器方法代码将不会被覆盖。那可以接受吗?

4 个答案:

答案 0 :(得分:2)

嗯,这是一个复杂的问题,但我会尽我所能回答。这很大程度上取决于您/您的组织的风险承受能力以及他们希望在测试中投入多少时间。我相信很多测试,但有太多这样的事情。

单元测试测试代码单元。很棒,但是什么是单位?本文是一个非常好的讨论:http://martinfowler.com/bliki/UnitTest.html但是一个单元基本上是应用程序中最小的可测试部分。

许多文献(例如https://www.amazon.ca/Continuous-Delivery-Reliable-Deployment-Automation/dp/0321601912/)描述了多个测试阶段,包括非常低级别的单元测试和模拟外部性,例如DB或文件系统或远程系统,以及" api验收测试" (有时称为集成测试,虽然这是一个模糊的术语,可能意味着其他事情)。后一种类型会激活应用程序的测试实例,在响应时调用API和断言。

简短的回答如下:对于单元测试,关注单元(可能是服务或更细粒度),但是你描述的另一组测试,其中测试表现得像客户端并调用你的api,也是值得的。我的建议是:做两件事,但不要同时进行单元测试。

答案 1 :(得分:1)

最佳方法是测试VIA控制器。输入Web服务并在此处返回值。因此,控制器在这方面发挥了相当大的作用。也可能有小逻辑,你可能会错过

您可以尝试使用MockMvc方法测试控制器。

参考:Reference-1Reference-2

或者使用问题Reference-3

中提到的RestTemplate

答案 2 :(得分:0)

它基于您想要测试的内容,您可以分离您的测试,特别是如果您有开发人员团队,测试用例来测试您的业务"服务"以及另一个测试用例作为集成测试要使用REST模板,在这种情况下,您可以更快,更轻松地计算您的错误。

答案 3 :(得分:0)

这取决于你想做什么。

一种方法是对工作单元进行单元测试,例如服务和MVC控制器。这些测试仅测试此类中的最终逻辑,并尝试达到高分支覆盖(如果适用)。 除此之外,您还可以编写一个集成测试来发出HTTP请求,转到真正的服务bean,并且只模拟最终的资源访问。

对于集成测试,您可以使用Spring的支持,请参阅此处:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#spring-mvc-test-framework