J'utilise le framework Mockito pour créer des objets Mock dans mes tests JUnit. Chaque modèle sait quelles méthodes ont été utilisées, alors je peux écrire pendant mes tests
verify(myMock, atLeastOnce()).myMethod();
Je me demande si cette fausse connaissance interne de ce qu’elle a appelé persistera à travers mes tests? Si cela persiste, il est possible que je reçois des faux positifs en utilisant la même méthode verify
dans deux tests.
Un exemple de code
@RunWith(MockitoJUnitRunner.class)
public class EmrActivitiesImplTest {
@Mock private MyClass myMock;
@Before
public void setup() {
when(myMock.myMethod()).thenReturn("hello");
}
@Test
public void test1() {
// ..some logic
verify(myMock, atLeastOnce()).myMethod();
}
@Test
public void test2() {
// ..some other logic
verify(myMock, atLeastOnce()).myMethod();
}
}
L'état fictif est maintenu - test2 réussira indépendamment de la méthode de vérification de test1
L'état fictif est réinitialisé - test2 échouera si myMock.myMethod () n'est pas appelé
JUnit crée une nouvelle instance de classe de test chaque fois qu'il exécute une nouvelle méthode de test et exécute la méthode @Before chaque fois qu'il crée une nouvelle classe de test. Vous pouvez facilement le tester
@Before
public void setup() {
System.out.println("setup");
when(myMock.myMethod()).thenReturn("hello");
}
Et MockitoJUnitRunner créera une nouvelle instance fictive MyMock pour chaque méthode de test.
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class sandbox {
@Mock
private MyClass myMock;
@Before
public void setup() {
when(myMock.myMethod()).thenReturn("hello");
}
@Test
public void test1() {
myMock.myMethod();
verify(myMock, times(1)).myMethod();
}
@Test
public void test2() {
myMock.myMethod();
verify(myMock, times(1)).myMethod();
}
}
Ça passe. Si l'état persiste, le deuxième test échouera. Si vous le corrigez, vous obtiendrez une nouvelle instance de l'objet simulé pour chaque test.
Si vous ne faites qu'initialiser les objets Mock dans votre setup
, vous pouvez fournir différentes fonctionnalités dans chaque test. Vous pouvez l'initialiser une fois et changer la façon dont ils agissent/attendent par test après cela.