重置 Spring - 在集成测试期间启动
Reset Spring-Boot During Integration Tests
我想我正在尝试让一个角落案例在这里工作。 在我当前的项目中,大约有 20 个集成测试。一项新的集成测试需要 @EnableAsync
才能使测试工作:
@RunWith(SpringRunner.class)
@EnableAsync
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
public class MyITest {
:
}
单独 运行 时,此测试工作正常。
考虑到 Maven 和 Eclipse 在一个项目中执行测试,并且知道环境只创建一次并为所有集成测试重复使用(或软重置),这个集成测试有点要求 运行 首先。然而,(几乎?)从来没有这样。
因此,这个集成测试(几乎?)总是失败。一个明显的解决方案是将 @EnableAsync
添加到所有集成测试中。然而,这是一个糟糕的依赖关系,我敢打赌,一旦有人添加了另一个集成测试并忘记了这个要求,它就会被打破。
我正在寻找一种方法来强制 SpringRunner
完全重置上下文并真正从头开始,同时查看 @EnableAsync
。理想情况下,这种方式包括标记 SpringRunner
也必须在测试后重置上下文(即删除 @EnableAsync
)。这样,任何执行顺序都将确保只有那个测试具有 @EnableAsync
.
有办法吗?或者我可以在 @Before
/@After
方法中通过代码手动打开 on/off 异步内容吗?
不确定这是否是您要查找的内容。
可能重复:How do you reset Spring JUnit application context after a test class dirties it?
哇,我想我只是无意中发现的......我现在拥有的是:
@RunWith(SpringRunner.class)
@EnableAsync
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = {
ClassWithAnAutowiredAsyncDependency.class // <=== difference!!! ===>
})
public class MyITest {
:
@Autowired
private ClassWithAnAutowiredAsyncDependency mine;
:
}
似乎给定的 类 被重置(特别是?)或者至少自动装配再次发生在那里或其他什么。我无法解释它有什么不同。
我确定这个集成测试不是第一个集成测试 运行 而且异步位似乎已经到位。
嗯,测试是绿色的,有效...
我想我正在尝试让一个角落案例在这里工作。 在我当前的项目中,大约有 20 个集成测试。一项新的集成测试需要 @EnableAsync
才能使测试工作:
@RunWith(SpringRunner.class)
@EnableAsync
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
public class MyITest {
:
}
单独 运行 时,此测试工作正常。
考虑到 Maven 和 Eclipse 在一个项目中执行测试,并且知道环境只创建一次并为所有集成测试重复使用(或软重置),这个集成测试有点要求 运行 首先。然而,(几乎?)从来没有这样。
因此,这个集成测试(几乎?)总是失败。一个明显的解决方案是将 @EnableAsync
添加到所有集成测试中。然而,这是一个糟糕的依赖关系,我敢打赌,一旦有人添加了另一个集成测试并忘记了这个要求,它就会被打破。
我正在寻找一种方法来强制 SpringRunner
完全重置上下文并真正从头开始,同时查看 @EnableAsync
。理想情况下,这种方式包括标记 SpringRunner
也必须在测试后重置上下文(即删除 @EnableAsync
)。这样,任何执行顺序都将确保只有那个测试具有 @EnableAsync
.
有办法吗?或者我可以在 @Before
/@After
方法中通过代码手动打开 on/off 异步内容吗?
不确定这是否是您要查找的内容。
可能重复:How do you reset Spring JUnit application context after a test class dirties it?
哇,我想我只是无意中发现的......我现在拥有的是:
@RunWith(SpringRunner.class)
@EnableAsync
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = {
ClassWithAnAutowiredAsyncDependency.class // <=== difference!!! ===>
})
public class MyITest {
:
@Autowired
private ClassWithAnAutowiredAsyncDependency mine;
:
}
似乎给定的 类 被重置(特别是?)或者至少自动装配再次发生在那里或其他什么。我无法解释它有什么不同。
我确定这个集成测试不是第一个集成测试 运行 而且异步位似乎已经到位。
嗯,测试是绿色的,有效...