Non è possibile farlo perché secondo le specifiche non è possibile inserire due volte la stessa annotazione sullo stesso elemento annotato.
Allora, qual è la soluzione? La soluzione è metterne solo uno @RunWith()
con il corridore senza il quale non puoi stare e sostituirne l'altro con qualcos'altro. Nel tuo caso immagino che rimuoverai MockitoJUnitRunner
e farai programmaticamente ciò che fa.
In effetti l'unica cosa che fa è eseguire:
MockitoAnnotations.initMocks(test);
all'inizio del test case. Quindi, la soluzione più semplice è inserire questo codice nel setUp()
metodo:
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
Non ne sono sicuro, ma probabilmente dovresti evitare più chiamate di questo metodo usando flag:
private boolean mockInitialized = false;
@Before
public void setUp() {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
Tuttavia, una soluzione migliore e riutilizzabile può essere implementata con le regole di JUnt.
public class MockitoRule extends TestWatcher {
private boolean mockInitialized = false;
@Override
protected void starting(Description d) {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
}
Ora aggiungi la seguente riga alla tua classe di test:
@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();
e puoi eseguire questo test case con qualsiasi corridore tu voglia.