J'essaie de se moquer d'un appel de méthode interne de ma méthode de test
ma classe ressemble à ceci p> lorsque j'écris le junit pour la méthode getStudent () , Y a-t-il un moyen de se moquer de la ligne p> ou de rendre la classe d'application utilise un objet Mock Dao lors de l'exécution JUNIT au lieu de l'appel DAO qui se connecte à la DB ? p> p>
3 Réponses :
Afin de tirer beaucoup hors du cadre moqueur, l'objet MyDao doit être injecté. Vous pouvez utiliser quelque chose comme de printemps notre Guice ou utilisez simplement un motif d'usine pour vous fournir l'objet DAO. Ensuite, dans votre test de l'unité, vous avez une usine de test pour vous fournir des objets faux dao au lieu de vrais. Ensuite, vous pouvez écrire du code tel que:
Mockito.when(mockDao.getStudentDetails()).thenReturn(someValue);
+1 pour suggérer une injection comme la bonne façon de manipuler cette
Vous pouvez utiliser le Cas de test complet p> quandNew () code> méthode de PowerMock (voir
public class Student {
private String name;
public Student() {
name = "real";
}
public String getName() {
return name;
}
}
@Preparefortest (mydao .class) non app
@telebog incorrect. Du lien de ma réponse: Notez que vous devez préparer la classe Créer la nouvelle instance de MyClass pour le test, pas la myclass elle-même. Par exemple. Si la classe qui fait de la nouvelle myClass () est appelée x, vous devriez faire @preparesportest (X.class) pour que vous puissiez travailler:
Si vous n'avez pas accès à Mockito, vous pouvez également utiliser PowerMock pour faire le même objectif. Par exemple, vous pouvez effectuer ce qui suit:
@RunWith(PowerMockRunner.class) @PrepareForTest(App.class) public class AppTest { @Test public void testGetStudent() throws Exception { MyDAO mockDao = createMock(MyDAO.class); expect(mockDao.getStudentDetails()).andReturn(new Student()); replay(mockDao); PowerMock.expectNew(MyDAO.class).andReturn(mockDao); PowerMock.replay(MyDAO.class); // make sure to replay the class you expect to get called App app = new App(); // do whatever tests you need here } }
Supprimera le Downvote si vous montrez où Createemock appelle à. Est-ce une importation statique? Si oui, pourquoi n'est-ce pas la même chose que PowerMock?