对于Spring Boot
进行测试,它可以与@SpringBootTest
一起使用,并与SpringBootTest.WebEnvironment
枚举一起使用。好吧,根据javadoc,它有4个值。
此外,我已经阅读了Testing Spring Boot Applications部分
对我来说很清楚,NONE
仅用于测试服务器端,而MOCK
则用于通过Web端测试所有服务器端(以解决Spring MVC Test
问题)。直到这里我还好。我都用。
其他两个:RANDOM_PORT
和DEFINED_PORT
与to start a full running server
有关,它与Testing with a running server部分(该部分的第一段开始)一致
两个问题:
在什么情况下必须使用full running server
?
强制使用RANDOM_PORT
或DEFINED_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/