你不能这样做,因为根据规范,你不能在同一个注释元素上两次放置相同的注释。
那么,什么是解决方案?解决方案是只有一个@RunWith()与赛跑者,你不能忍受没有,并用别的东西替换其他。在你的情况下,我想你会删除MockitoJUnitRunner,并做程序化它做什么。
事实上,它运行的唯一的事情:
MockitoAnnotations.initMocks(test);
在测试用例的开始。因此,最简单的解决方案是将此代码放入setUp()方法中:
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
我不知道,但可能你应该避免多次调用此方法使用标志:
private boolean mockInitialized = false;
@Before
public void setUp() {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
然而,更好的,可重用的解决方案可以用JUnt的规则实现。
public class MockitoRule extends TestWatcher {
private boolean mockInitialized = false;
@Override
protected void starting(Description d) {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
}
现在只需添加以下行到您的测试用例:
@Rule public MockitoRule mockitoRule = new MockitoRule();
你可以运行这个测试用例与任何你想要的赛跑者。