我有一个包含3个测试类的项目 - TextModelTest
,LocalClassificationTaskTest
,ModelFetcherTest
。
当单独运行时,每个都通过,但是当一次运行时(来自Eclipse),第三个(ModelFetcherTest
)的所有测试都失败并带有NullPointerException
。令人惊讶的是,eclipse甚至不会停留在测试类(ModelFetcher
)中的断点处。
在做了一些研究之后(试图忽略每个成功的测试以找出导致第3类失败的那个),我注意到第二个测试类(LocalClassificationTaskTest
)有一个Mocked字段输入ModelFetcher
,这是第3个测试类的CUT:
@Mocked ModelFetcher modelFetcher;
在ModelFetcherTest
:
@Tested ModelFetcher modelFetcher;
我删除了@Mocked
注释,并将其逻辑替换为MockUp<ModelFetcher>
(这更麻烦,更冗长,但无论如何),现在一切正常。
请注意,问题仅发生在eclipse中。当maven运行时,所有测试都通过了。 没有种族问题,所有测试都一致地通过和失败(没有运气)。
@Mocked
注释是否会影响同一项目中的其他测试用例?
答案 0 :(得分:0)
一个类中@Mocked注释可能影响另一个类的唯一方法是在类之间共享jvm进程。通常,每个测试类应该分叉一个单独的jvm进程,从而将模拟隔离到它们各自的测试类。听起来像你的测试套件一起运行所有测试运行一个单独的jvm。我没有使用Eclipse,但this thread似乎表明这对Eclipse中的其他人来说是一个问题。但是,您可以在Eclipse中更改构建脚本以分离单独的jvm。