java - Spring Boot REST 应用测试方法

标签 java spring rest junit spring-boot

我有一个 Spring boot + REST 应用程序。当我需要写单元测试的时候,是直接调用service bean还是调用rest controller?如果我直接调用 rest controller,我必须使用 RestTemplate 并将 rest api 作为客户端调用,对吗?

最佳和必需的做法是什么?

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

最佳答案

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

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

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

简短的回答如下:对于单元测试,关注单元(可能是服务或更细粒度),但您描述的另一组测试,其中测试的行为类似于客户端并调用您的 api,也是值得的.我的建议:两者都做,但不要同时调用两个单元测试。

关于java - Spring Boot REST 应用测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38189777/

相关文章:

rest - 服务器如何知道不记名 token 是否有效而不将其存储在磁盘或内存中

来自 JAR 的 Java 可执行文件

java - Switch 多次返回相同的语句

java - 如何自动检测 Firebase Firestore 集合中的新文档?

java - 如何调用 Spring 框架存储库方法

java - Spring + Hibernate 的就绪配置

java - 更改默认 Servlet 响应

java - Spring Web应用程序内存分析的疑惑

mysql - 如何处理 org.hibernate.exception.ConstraintViolationException,我使用 try catch 但它不起作用

java - 如何为我的 REST 应用程序配置 https?