JMockit @Mocked注释导致其他测试失败

时间:2016-10-03 02:14:42

标签: java eclipse unit-testing junit jmockit

我有一个包含3个测试类的项目 - TextModelTestLocalClassificationTaskTestModelFetcherTest。 当单独运行时,每个都通过,但是当一次运行时(来自Eclipse),第三个(ModelFetcherTest)的所有测试都失败并带有NullPointerException。令人惊讶的是,eclipse甚至不会停留在测试类(ModelFetcher)中的断点处。

在做了一些研究之后(试图忽略每个成功的测试以找出导致第3类失败的那个),我注意到第二个测试类(LocalClassificationTaskTest)有一个Mocked字段输入ModelFetcher,这是第3个测试类的CUT:

@Mocked ModelFetcher modelFetcher;

ModelFetcherTest

@Tested ModelFetcher modelFetcher;

我删除了@Mocked注释,并将其逻辑替换为MockUp<ModelFetcher>(这更麻烦,更冗长,但无论如何),现在一切正常。

请注意,问题仅发生在eclipse中。当maven运行时,所有测试都通过了。 没有种族问题,所有测试都一致地通过和失败(没有运气)。

@Mocked注释是否会影响同一项目中的其他测试用例?

1 个答案:

答案 0 :(得分:0)

一个类中@Mocked注释可能影响另一个类的唯一方法是在类之间共享jvm进程。通常,每个测试类应该分叉一个单独的jvm进程,从而将模拟隔离到它们各自的测试类。听起来像你的测试套件一起运行所有测试运行一个单独的jvm。我没有使用Eclipse,但this thread似乎表明这对Eclipse中的其他人来说是一个问题。但是,您可以在Eclipse中更改构建脚本以分离单独的jvm。