没有共享bean的春天测试会互相影响吗?

时间:2019-09-02 07:47:13

标签: spring-boot testing concurrency spring-boot-test camunda

我有两个单元测试类,每个类都使用@RunWith(SpringJUnit4ClassRunner.class)测试camunda BPM流程模型。我使用camunda扩展程序来捕获流程模型测试范围,该规则适用:

    @Autowired
    private ProcessEngine processEngine;

    @Rule
    @ClassRule
    public static ProcessEngineRule processEngineRule;

    @PostConstruct
    public void initProcessCoverage() {
        processEngineRule = TestCoverageProcessEngineRuleBuilder.create(processEngine).build();
    }

由于测试是使用@RunWith(SpringJUnit4ClassRunner.class)运行的,因此我在专用配置中手动创建了ProcessEngine。

现在是这样:当我单独运行它们时,我的两个测试类都没有问题地运行。如果同时运行它们,则该类中所有名称后面带有名称的单元测试都将失败。 (即ABCtest.java全部通过,XYZtest.java全部失败)

异常很明显:

java.lang.NullPointerException  at org.camunda.bpm.extension.process_test_coverage.model.MethodCoverage.endCoveredElement(MethodCoverage.java:76)

在调试后我发现,此覆盖规则背后的对象在运行时配置错误:当涉及第二类的测试时,仍然配置为覆盖第一类的测试。

现在这可能是覆盖范围扩展的问题,但是我很确定它也与测试的执行方式有关。当我将所有测试放在一个类中时(这真是太丑了),它们全部通过。因此,我想问题必须出在JUnit如何处理来自不同类的测试上。但是我该如何影响呢?我还能尝试什么?

无效的方法:

  • 确保两个测试类都具有完全独立的配置
  • @DirtiesContext
  • 使两个测试类都从持有@Rule等的抽象超类继承(我只是猜测命中点)

非常感谢您的帮助。

0 个答案:

没有答案