2017-05-29 103 views
0

我想试图让这个角落案例在这里工作。在我目前的项目中,大约有20个集成测试。一个新的集成测试需要@EnableAsync使测试工作:集成测试期间重置弹簧启动

@RunWith(SpringRunner.class) 
@EnableAsync 
@SpringBootTest(webEnvironment = WebEnvironment.NONE) 
public class MyITest { 
    : 
} 

当单独运行,本次测试工作正常。

考虑到Maven和Eclipse在一个项目中执行测试,并且知道只有一次创建环境并且对所有集成测试重用(或软重置),有必要首先运行该集成测试。但是,这(几乎?)从来不是这种情况。

因此,这个集成测试(几乎?)总是失败。一个明显的解决方案是将@EnableAsync添加到所有集成测试。然而,这是一个糟糕的依赖,我敢打赌,一旦有人添加了另一个集成测试,并忘记了这个要求,就会打破这个依赖关系

我正在寻找一种方法来强制SpringRunner完全重置上下文,并真正从头开始也看@EnableAsync。理想情况下,该方法包括标记SpringRunner必须在测试之后重置上下文(即,除去@EnableAsync)。这样,任何执行顺序都可以确保只有那一个测试有@EnableAsync

有没有办法做到这一点?或者我可以通过@Before/@After方法中的代码手动打开/关闭异步内容?

+0

的[你如何复位弹簧JUnit的应用程序上下文的测试类弄脏了它?(可能的复制https://stackoverflow.com/questions/14718088/how-do-you-reset-spring-junit-application-context-after-a-test-class-dirties-it) – niekname

回答

0

Whow,我想我只是偶然发现了......我现在有:

@RunWith(SpringRunner.class) 
@EnableAsync 
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = { 
    ClassWithAnAutowiredAsyncDependency.class // <=== difference!!! ===> 
}) 
public class MyITest { 
: 
    @Autowired 
    private ClassWithAnAutowiredAsyncDependency mine; 
: 
} 

看来,如果给定类复位(特别? )或者至少自动装配发生在那里或其他东西。我无法解释它有什么不同。

我确定这个集成测试不是第一个正在运行的集成测试,而且仍然是异步位。

好,测试是绿色的,它的工作原理...

相关问题