J'écris une classe de test unitaire (en utilisant testng) qui a mocké des variables membres (en utilisant Mockito) et en exécutant les tests en parallèle. J'ai d'abord mis en place le faux dans une méthode @BeforeClass, et dans chaque cas de test, je casse quelque chose en créant un Mockito.when pour chaque cas exceptionnel. Ce que je vois (sans surprise) est que ces tests ne sont pas indépendants; le Mockito.when dans un cas de test affecte les autres. J'ai remarqué que je pourrais être mis en place les mocks avant chaque test, et j'ai changé le @BeforeClass à @BeforeMethod. Je ne m'attendais toujours pas à ce que ça passe de manière cohérente, car les tests fonctionnent tous sur le même objet fantaisie partagé en même temps. Cependant, tous les tests ont commencé à passer régulièrement. Ma question est "pourquoi"? Est-ce que cela va finalement échouer? Peu importe ce que je fais (Thread.sleep, etc), je ne peux pas reproduire un échec.Test parallèle avec simulation partagée
L'utilisation de @BeforeMethod est-elle suffisante pour rendre ces tests indépendants? Si oui, quelqu'un peut-il expliquer pourquoi?
code exemple ci-dessous:
public class ExampleTest {
@Mock
private List<String> list;
@BeforeClass // Changing to @BeforeMethod works for some reason
public void setup() throws NoSuchComponentException, ADPRuntimeException {
MockitoAnnotations.initMocks(this);
Mockito.when(list.get(0)).thenReturn("normal");
}
@Test
public void testNormalCase() throws InterruptedException {
assertEquals(list.get(0), "normal"); // Fails with expected [normal] but found [exceptional]
}
@Test
public void testExceptionalCase() throws InterruptedException {
Mockito.when(list.get(0)).thenReturn("exceptional");
assertEquals(list.get(0), "exceptional");
}
}
Je vois, 'parallel =" "ne faisait pas ce que je pensais faire. C'est logique, et merci pour les suggestions de contourner ce problème quand je change de méthodes 'parallel =" "'! – ChrisV