spring-boot - SpringBootTest.WebEnvironment:什么时候必须使用RANDOM_PORT和DEFINED_PORT?

标签 spring-boot

对于Spring Boot进行测试,它可以与@SpringBootTest一起使用,并与SpringBootTest.WebEnvironment枚举一起使用。好吧,根据javadoc,它有4个值。

此外,我已经阅读了Testing Spring Boot Applications部分

对我来说很清楚,NONE仅用于测试服务器端,而MOCK则用于通过Web端测试所有服务器端(以解决Spring MVC Test问题)。直到这里我还好。我都用。

其他两个:RANDOM_PORTDEFINED_PORTto start a full running server有关,它与Testing with a running server部分(该部分的第一段开始)一致

两个问题:


在什么情况下必须使用full running server
强制使用RANDOM_PORTDEFINED_PORT的特定方案有哪些?

最佳答案

如果要测试应用程序,通常会使用一台运行完整的服务器,因为它将在生产中使用。对于运行中的服务器,您可以通过TCP网络连接向服务器发出HTTP请求。这涉及测试中的网络堆栈和servlet容器。相比之下,当您使用Spring MVC测试时,将直接通过模拟请求调用Spring Framework的DispatcherServlet。不涉及网络堆栈和servlet容器。

DEFINED_PORT表示您的服务器将在TCP套接字上侦听特定端口上的HTTP请求。默认情况下为8080。如果您在不知道特定端口是否可用的环境中进行测试,则由于端口冲突而导致测试失败。

RANDOM_PORT表示服务器将在操作系统分配的端口上启动,并保证该端口可用。 Spring Boot通过在测试类的字段上使用@LocalServerPort批注使此端口对您的应用程序可用。它还会自动配置默认的TestRestTemplate实例以使用此端口。

关于spring-boot - SpringBootTest.WebEnvironment:什么时候必须使用RANDOM_PORT和DEFINED_PORT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48918706/

相关文章:

java - 如何在 Reactive Spring WEBFlux(Spring 5) 中读取上传的 json 文件内容

maven - 使用 “spring-boot-starter-parent”时如何在Maven中使用较低的Elastic搜索版本

spring - liquibase-hibernate5 不适用于 liquibase-maven-plugin

java - 如何测试@Valid 注解是否有效?

java - 如何在调试/运行 Spring Boot 项目时在 IntelliJ "out"目录中生成 build-info.properties?

spring-boot - Flyway 未运行迁移脚本

java - 检测 Spring Boot/Java 配置应用程序的最佳方法

reactjs - 浏览器刷新后丢失 JWT token

spring-boot - spring-kafka @KafkaListener中的Acknowledgement.acknowledge()引发异常

rest - 在Spring Boot API上实现JWT身份验证