在 JUnit 3 中,测试是否在同一个 spring 容器中运行?还是每个测试都有自己的容器?
可以做些什么来防止测试从“出血”会话数据到其他测试?
我不知道 JUnit 3 的细节,但我建议你升级到 JUnit 4。
现在,如果@ContextConfiguration
(或@WebAppConfiguration
)用于指定使用哪个应用程序上下文以及SpringJUnit4ClassRunner
用于执行测试,那么它会在测试之间缓存。从参考文档:
一旦 TestContext 框架为测试加载 ApplicationContext(或 WebApplicationContext),该上下文将被缓存并重用于在同一测试套件中声明相同唯一上下文配置的所有后续测试。要了解缓存的工作原理,了解unique和test suite的含义很重要。
ApplicationContext 可以通过用于加载它的配置参数的组合来唯一标识。因此,配置参数的唯一组合用于生成缓存上下文的键。
参考文档继续列出用于创建上下文缓存键的配置参数。
什么样的会话数据是“出血”?使用@Transactional
注释回滚任何数据库更改以进行写入数据库的测试。如果@DirtiesContext
注释被污染,注释可用于重新创建当前应用程序上下文,但通常可以通过指定不同的@ActiveProfiles
. 在参考文档中阅读有关 Spring 的集成测试注释的更多信息。
我相信第一个问题的答案取决于运行测试的系统。Eclipse 重用上下文。Maven 每次测试都会加载一个新的。
第 2 部分:使用@DirtiesContext