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

Man*_*dan 1 spring-boot

为了Spring Boot进行测试,它@SpringBootTestSpringBootTest.WebEnvironment枚举一起使用。好吧,根据javadoc,它有4个值。

此外,我已经阅读了“ 测试Spring Boot应用程序”部分

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

其他两个:RANDOM_PORTDEFINED_PORT与有关to start a full running server,它与“ 正在运行服务器测试”部分(该部分开头的第一段)一致

两个问题:

  • 在哪种情况下必须与full running server?一起使用?
  • 还有什么具体的方案,以强制或者使用RANDOM_PORTDEFINED_PORT

And*_*son 5

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

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

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

  • 谢谢,关于“使用完整运行的服务器,您可以通过 TCP 网络连接向服务器发出 HTTP 请求”,这意味着我可以从同一个应用程序(无模拟)或其他项目来使用或测试该应用程序来调用它。我对么? (2认同)
  • 是的,您可以从具有网络访问权限的任何地方使用或测试该应用程序。 (2认同)