No puede hacer esto porque, de acuerdo con las especificaciones, no puede poner la misma anotación dos veces en el mismo elemento anotado.
¿Entonces, cuál es la solución? La solución es poner solo uno @RunWith()con un corredor sin el que no pueda permanecer y reemplazar el otro con otra cosa. En su caso, supongo que eliminará MockitoJUnitRunnery hará programáticamente lo que hace.
De hecho, lo único que hace es ejecutar:
MockitoAnnotations.initMocks(test);
al comienzo del caso de prueba. Entonces, la solución más simple es poner este código en el setUp()método:
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
No estoy seguro, pero probablemente debería evitar llamadas múltiples de este método usando flag:
private boolean mockInitialized = false;
@Before
public void setUp() {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
Sin embargo, se puede implementar una solución reutilizable mejor con las reglas de JUnt.
public class MockitoRule extends TestWatcher {
private boolean mockInitialized = false;
@Override
protected void starting(Description d) {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
}
Ahora solo agregue la siguiente línea a su clase de prueba:
@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();
y puede ejecutar este caso de prueba con cualquier corredor que desee.