Lors de l'utilisation du framework moqueur Mockito pour améliorer les capacités de test, les développeurs rencontrent souvent doReturn() et les méthodes when(). Bien que les deux méthodes servent à supprimer les invocations de méthodes, une distinction subtile existe entre elles lorsque vous travaillez avec des objets espionnés (annotés avec @Spy).
when(...).thenReturn(...):
doReturn(...).when(...):
Considérez ce qui suit MyClass :
public class MyClass { protected String methodToBeTested() { return anotherMethodInClass(); } protected String anotherMethodInClass() { throw new NullPointerException(); } }
doReturn(...).when(...):
@Spy private MyClass myClass; // Works as expected doReturn("test").when(myClass).anotherMethodInClass();
when(...).thenReturn(...):
// Throws a NullPointerException when(myClass.anotherMethodInClass()).thenReturn("test");
Dans ce scénario, doReturn() garantit que l'exception dans anotherMethodInClass() est évitée tout en renvoyant la valeur souhaitée. En revanche, when() déclenche l'appel de méthode réel, ce qui entraîne la levée de l'exception NullPointerException.
Par conséquent, lorsque vous travaillez avec des objets espionnés, le choix entre doReturn() et when() dépend si vous souhaitez invoquer la méthode actuelle ou la contourner complètement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!