Вы не можете этого сделать, потому что в соответствии со спецификацией вы не можете дважды поместить одну и ту же аннотацию на один и тот же аннотированный элемент.
Итак, какое решение? Решение состоит в том, чтобы поставить только один @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 = MockitoJUnit.rule();
и вы можете запустить этот тестовый пример с любым бегуном.