为什么 Spring Boot 中有不同类型的集成测试
Why are there different types of integration tests in Spring Boot
有人知道为什么 Spring 引导指南包含两种不同类型的集成测试吗? (https://github.com/spring-guides/gs-spring-boot#add-unit-tests)
一个有 TestRestTemplate 一个有 MockMvc 依赖?在每个测试类型 spring boot 中引导测试环境。那么这次分开的原因是什么?
当您使用 MockMvc
时,您正在测试应用程序的一个实例,其中 HTTP 请求周期已被模拟。因此,这里的测试范围只是应用程序的 MVC 方面。我不认为这通常会被标记为 "integration test",相反它更接近于单元测试(尽管它的范围比单个 class 大得多)。
当您使用 TestRestTemplate
时,您正在测试应用程序的 真实 实例,即您是 'springing up' 整个应用程序上下文并将其作为外部调用演员。这通常称为 "integration test",它可能是最接近您实际使用情况的测试。
现在,由于通过 TestRestTemplate
调用的 'full stack' 集成测试可以提供 MockMVC
测试提供的覆盖范围的超集,您可能想知道为什么要使用 MockMVC
测试。如果是这样,那么我认为这是一个问题...
测试范围; MockMVC
测试用例通常比完整的集成测试更快更容易启动(因为它们使用的应用程序上下文更少)。此外,由于它们使用的应用程序上下文较少,因此您可能不必费力地模拟出 真实 应用程序上下文中在测试中表现不佳的任何方面。
易于使用; MockMVC
带有静态帮助程序,用于断言 HTTP 状态、询问和断言 JSON 响应等。当然是 YMMMV,但对于许多人来说,这些有助于简化开发并帮助提供可读的测试用例。
在实践中,您可能希望结合使用这两种方法:
MockMVC
测试整个控制器层的详细测试,包括所有映射、所有调用的快乐和悲伤路径以及对 HTTP 状态代码、内容主体等的深度断言
TestRestTemplate
测试从用户角度表达的主要流程,例如Save a new Foo
、Search for all Foos
、Submit an invalid Foo update
等断言侧重于您的用户 see/are 感兴趣的部分。
有人知道为什么 Spring 引导指南包含两种不同类型的集成测试吗? (https://github.com/spring-guides/gs-spring-boot#add-unit-tests)
一个有 TestRestTemplate 一个有 MockMvc 依赖?在每个测试类型 spring boot 中引导测试环境。那么这次分开的原因是什么?
当您使用 MockMvc
时,您正在测试应用程序的一个实例,其中 HTTP 请求周期已被模拟。因此,这里的测试范围只是应用程序的 MVC 方面。我不认为这通常会被标记为 "integration test",相反它更接近于单元测试(尽管它的范围比单个 class 大得多)。
当您使用 TestRestTemplate
时,您正在测试应用程序的 真实 实例,即您是 'springing up' 整个应用程序上下文并将其作为外部调用演员。这通常称为 "integration test",它可能是最接近您实际使用情况的测试。
现在,由于通过 TestRestTemplate
调用的 'full stack' 集成测试可以提供 MockMVC
测试提供的覆盖范围的超集,您可能想知道为什么要使用 MockMVC
测试。如果是这样,那么我认为这是一个问题...
测试范围;
MockMVC
测试用例通常比完整的集成测试更快更容易启动(因为它们使用的应用程序上下文更少)。此外,由于它们使用的应用程序上下文较少,因此您可能不必费力地模拟出 真实 应用程序上下文中在测试中表现不佳的任何方面。易于使用;
MockMVC
带有静态帮助程序,用于断言 HTTP 状态、询问和断言 JSON 响应等。当然是 YMMMV,但对于许多人来说,这些有助于简化开发并帮助提供可读的测试用例。
在实践中,您可能希望结合使用这两种方法:
MockMVC
测试整个控制器层的详细测试,包括所有映射、所有调用的快乐和悲伤路径以及对 HTTP 状态代码、内容主体等的深度断言TestRestTemplate
测试从用户角度表达的主要流程,例如Save a new Foo
、Search for all Foos
、Submit an invalid Foo update
等断言侧重于您的用户 see/are 感兴趣的部分。