在并行测试环境中,我想为每个测试保证一个新的Context(不需要分支JVM)。我将Spring引入一个测试框架,该框架包含一些维护状态的类 - 因此每个测试执行都需要一个新的。
docs无法创建自定义@Override
public void onDestroy() {
super.onDestroy();
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
windowManager.removeViewImmediate(view);
}
,但我找不到有关如何执行此操作的详细信息。
我在调试测试时一直在逐步完成Spring代码,并试图找出如何集成我的自定义ContextCache
。我所考虑的方法几乎肯定是错误的,所以寻求指导方法来做到这一点。
测试框架基于ContextCache
,所以我有一个基类,如:
TestNG
我目前的理论涉及:
@ContextConfiguration(locations = {"classpath:one.xml", "classpath:two.xml"})
public abstract BaseTest extends AbstractTestNGSpringContextTests
。几乎是AbstractTestNGSpringContextTests
的克隆,除了控制它在成员声明中实例化的AbstractTestNGSpringContextTests
。 (它不能有效地分类)TestContextManager
(它具有默认的范围依赖关系)并重载各种方法以避免使用它在其成员声明中创建的org.springframework.test.context.TestContextManager
。这将委托给我的ContextCache
,它不会缓存任何上下文。 使用NoOpContextCache
。
我尝试但没有奏效的事情:
我使用spring-test 4.1.7
范围无济于事。 bean被声明为prototype
并且@Scope("prototype")
被@Autowired
声明,但我发现在BaseTest
扩展的所有测试中都使用了相同的实例。
BaseTest
当它正确地完成它的工作时,当有20个测试并行使用相同的缓存上下文时它没有用。
3小时后更新:
我交换@DirtiesContext
等确实最终与我的TestContextManager
合作,但是非常不优雅......即在我的源代码中以NoOpContextCache
包结束以解决范围限制。
然而,我确实使用了org.springframework.test.context
方式:
prototype
所以这真的让我得到了我所追求的结果,但是我会留下问题,因为我仍然想知道如何提供自定义@Configuration
public class SpringConfiguration {
@Bean
@Scope("prototype")
public MyStatefulBean get() {
return new MyStatefulBean();
}
}
。