如何在Spring Test中启用自定义ContextCache

时间:2016-08-05 00:40:20

标签: spring spring-test

在并行测试环境中,我想为每个测试保证一个新的Context(不需要分支JVM)。我将Spring引入一个测试框架,该框架包含一些维护状态的类 - 因此每个测试执行都需要一个新的。

docs无法创建自定义@Override public void onDestroy() { super.onDestroy(); WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); windowManager.removeViewImmediate(view); } ,但我找不到有关如何执行此操作的详细信息。

我在调试测试时一直在逐步完成Spring代码,并试图找出如何集成我的自定义ContextCache。我所考虑的方法几乎肯定是错误的,所以寻求指导方法来做到这一点。

测试框架基于ContextCache,所以我有一个基类,如:

TestNG

我目前的理论涉及:

  1. 为我自己的实现换出@ContextConfiguration(locations = {"classpath:one.xml", "classpath:two.xml"}) public abstract BaseTest extends AbstractTestNGSpringContextTests 。几乎是AbstractTestNGSpringContextTests的克隆,除了控制它在成员声明中实例化的AbstractTestNGSpringContextTests。 (它不能有效地分类)
  2. 子类化TestContextManager(它具有默认的范围依赖关系)并重载各种方法以避免使用它在其成员声明中创建的org.springframework.test.context.TestContextManager。这将委托给我的ContextCache,它不会缓存任何上下文。
  3. 使用NoOpContextCache

    我尝试但没有奏效的事情:

    1. 我使用spring-test 4.1.7范围无济于事。 bean被声明为prototype并且@Scope("prototype")@Autowired声明,但我发现在BaseTest扩展的所有测试中都使用了相同的实例。

    2. BaseTest当它正确地完成它的工作时,当有20个测试并行使用相同的缓存上下文时它没有用。

    3. 3小时后更新: 我交换@DirtiesContext等确实最终与我的TestContextManager合作,但是非常不优雅......即在我的源代码中以NoOpContextCache包结束以解决范围限制。

      然而,我确实使用了org.springframework.test.context方式:

      prototype

      所以这真的让我得到了我所追求的结果,但是我会留下问题,因为我仍然想知道如何提供自定义@Configuration public class SpringConfiguration { @Bean @Scope("prototype") public MyStatefulBean get() { return new MyStatefulBean(); } }

0 个答案:

没有答案