春天开机测试:上下文加载每个测试?

Perimosh:

在我的项目,我们有我们的所有测试一个超类。这是一个类的签名

@RunWith(SpringRunner.class)
@SpringBootTest(value = {"management.port=0"}, classes = Application.class, webEnvironment = WebEnvironment.RANDOM_PORT)
@ActiveProfiles({"localhost", "test"})
@ContextConfiguration(classes = {Application.class, SomeConfiguration.class})
@Ignore
public abstract class AIntegrationTest {

凡Application.class是我们的主要类,并SomeConfiguration.class它只是一些@Bean和其他的东西,没有什么花哨。

我使用的gradle产出,以及运行我的测试中我做的:

./gradlew :my-project:test

我的问题是:

  • 我不知道,如果每次测试的情况下被初始化。但我可以保证的背景下被初始化多次。我通过看日志知道这一点。
  • 由于多个上下文被初始化,似乎环境相互重叠。我知道这是因为的症状之一是这样的例外:

    Caused by: org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [org.springframework.cloud.context.environment.EnvironmentManager@36408d9e] with key 'environmentManager'; nested exception is javax.management.InstanceAlreadyExistsException: RedeemAway:name=environmentManager,type=EnvironmentManager
    
  • 即使我不关心正在加载的多个上下文,我的印象是,当测试完成之前,前一个结束试了下得到一个新的上下文。我说,因为从上面异常的重叠了这一点。

由于所有测试共享同一个JVM,当一些豆类结婚登记了两次,该异常上升。从这个链接:

上下文缓存

据说:

一个ApplicationContext可以通过的是,用于加载配置参数的组合来唯一地标识。因此,配置参数的唯一组合被用于产生在其下上下文高速缓存的密钥。TestContext框架采用以下配置参数来构建上下文缓存键

我明白,但是,我不知道我怎样才能做到这一点?我的目标是运行所有我在同一JVM测试和重用与每个测试的上下文。

编辑于星期四2月22日

事情我想:

  • spring.jmx.enabled:假
  • spring.jmx.default域:一些价值

真的禁用JMX不应该帮助,因为错误时抛出是围绕EnvironmentManager,这是春天的云。

Perimosh:

我找到了答案,我的问题。这里是很好的解释:

https://github.com/spring-projects/spring-boot/issues/7174

基本上,如果你运行一系列测试,只要他们中的一个被启动,如果它使用注释@MockBean这将迫使春天重新加载上下文。

奖励:你会看到同样的行为,如果你的测试使用org.mockito.Mock。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在春天开机测试无法加载上下文属性

春天开机测试类重用更快的测试运行应用程序上下文?

测试与restAssured春天开机支架应用

春天开机测试MalformedURLException异常:未知协议:类路径

春天开机测试不找到兄弟包豆

春天开机测试不尊重网络安全配置

集成测试春天开机默认的配置文件

春天开机测试“没有合格可用类型的豆”

与wiremock随机端口设置属性春天开机测试

Spring 为每个单元测试文件加载上下文

春天的上下文不加载

春天开机 - 单元测试春天JPA的数据仓库

春天开机测试:在视活跃简档测试执行不同的SQL脚本?

春天开机:如何在单元测试覆盖默认属性

春天开机DataJpaTest单元测试恢复到H2,而不是MYSQL

春天开机,JUnit测试使用不同的配置文件

春天开机:如何只在詹金斯运行测试类?

我不能@Spy对象黄瓜春天开机测试分两步定义

春天开机测试数据库初始化运行两次

如何会在春天开机并行测试jUnit5 - 黄瓜5版多

春天开机测试前初始化数据库

春天开机测试失败的说法,无法启动ServletWebServerApplicationContext由于缺少ServletWebServerFactory豆

春天开机只在单元测试返回错误的状态代码

春天开机:如何读取classpath中资源的单元测试

使用 spock 进行集成测试。在第一次测试之前加载上下文

春天如何加载多个骆驼上下文

Axon测试:缺少上下文

库测试:如何创建上下文?

Spring 测试:缺少 servlet 上下文