@ContextConfiguration位置属性对于Sping Boot 集成测试没有意义。是否有其他方法可以跨多个使用@SpringBootTest注解的测试类重用应用程序上下文?
@ContextConfiguration
@SpringBootTest
woobm2wo1#
是的。实际上这是默认行为。链接指向SpringFramework文档, Boot 在后台使用它。顺便说一句,默认情况下,当@ContextConfiguration也被使用时,上下文也被重用。
hc2pp10m2#
对于像我一样从谷歌登陆的人:如果您的Maven surefire插件中有<reuseFork>false</reuseFork>,那么您的上下文就不可能被重用,因为您实际上是在为每个测试类生成一个新的JVM。Spring文档中对此进行了详细说明:https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-ctx-management-caching
<reuseFork>false</reuseFork>
cmssoen23#
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
上面的注解说明加载了完整的上下文,并且在测试中使用了相同的上下文。这意味着它只加载了一次。Sping Boot 提供了一个@SpringBootTest注解,当您需要Spring Boot特性时,它可以用作标准spring-test @ContextConfiguration注解的替代方法。
ia2d9nvy4#
如果您从Google登录到此处,并且遇到了启动多个应用程序上下文的问题,请注意:确保当你多次使用@SpringBootTests时,你使用的是相同的属性。例如,如果你有一个测试只使用@SpringBootTest,而另一个使用@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT),那么每个测试都将启动它自己的上下文!最简单的方法是在每个集成测试中扩展一个BaseIntegrationTest类,并将@SpringBootTest注解放在该基类上,例如:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
BaseIntegrationTest
package com.example.demo; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public abstract class BaseIntegrationTest{ }
ffscu2ro5#
对我们来说,@ConfigurationPropertiesScan引起的问题出现在一个测试中,而其他测试中没有。RoshanKumar的answer提供了一个线索。
@ConfigurationPropertiesScan
5条答案
按热度按时间woobm2wo1#
是的。实际上这是默认行为。链接指向SpringFramework文档, Boot 在后台使用它。
顺便说一句,默认情况下,当
@ContextConfiguration
也被使用时,上下文也被重用。hc2pp10m2#
对于像我一样从谷歌登陆的人:
如果您的Maven surefire插件中有
<reuseFork>false</reuseFork>
,那么您的上下文就不可能被重用,因为您实际上是在为每个测试类生成一个新的JVM。Spring文档中对此进行了详细说明:https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-ctx-management-caching
cmssoen23#
上面的注解说明加载了完整的上下文,并且在测试中使用了相同的上下文。这意味着它只加载了一次。
Sping Boot 提供了一个@SpringBootTest注解,当您需要Spring Boot特性时,它可以用作标准spring-test @ContextConfiguration注解的替代方法。
ia2d9nvy4#
如果您从Google登录到此处,并且遇到了启动多个应用程序上下文的问题,请注意:
确保当你多次使用@SpringBootTests时,你使用的是相同的属性。例如,如果你有一个测试只使用
@SpringBootTest
,而另一个使用@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
,那么每个测试都将启动它自己的上下文!最简单的方法是在每个集成测试中扩展一个
BaseIntegrationTest
类,并将@SpringBootTest
注解放在该基类上,例如:ffscu2ro5#
对我们来说,
@ConfigurationPropertiesScan
引起的问题出现在一个测试中,而其他测试中没有。RoshanKumar的answer提供了一个线索。