Vous ne pouvez pas faire cela car, selon les spécifications, vous ne pouvez pas placer la même annotation deux fois sur le même élément annoté.
Alors, quelle est la solution? La solution est d'en mettre un seul @RunWith()
avec un coureur dont vous ne pouvez pas vous passer et de remplacer un autre par autre chose. Dans votre cas, je suppose que vous supprimerez MockitoJUnitRunner
et ferez par programme ce qu'il fait.
En fait, la seule chose qu'il fait, c'est s'exécuter:
MockitoAnnotations.initMocks(test);
au début du cas de test. Donc, la solution la plus simple est de mettre ce code en setUp()
méthode:
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
Je ne suis pas sûr, mais vous devriez probablement éviter les appels multiples de cette méthode en utilisant flag:
private boolean mockInitialized = false;
@Before
public void setUp() {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
Cependant, une meilleure solution réutilisable peut être implémentée avec les règles de JUnt.
public class MockitoRule extends TestWatcher {
private boolean mockInitialized = false;
@Override
protected void starting(Description d) {
if (!mockInitialized) {
MockitoAnnotations.initMocks(this);
mockInitialized = true;
}
}
}
Maintenant, ajoutez simplement la ligne suivante à votre classe de test:
@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();
et vous pouvez exécuter ce cas de test avec n'importe quel coureur de votre choix.