Si vous souhaitez simuler uniquement certaines méthodes de la classe appelée à partir de la classe testée
JMockit 1.46
public class Sample {
@Inject
Hoge hoge;
public String getHoge() {
return hoge.getHoge() + hoge.getHogeUpper();
}
}
J'utilise la méthode de Hoge injectée à partir de la classe testée. Il s'agit d'une solution de contournement si vous souhaitez partiellement Mock the Hoge.
public class Hoge {
public String getHoge() {
return "hoge";
}
public String getHogeUpper() {
return null;
}
}
Veuillez supposer que getHoge a été implémenté et que getHogeUpper n'a pas encore été implémenté.
public class SampleTest {
@Tested
Sample sample;
@Injectable
Hoge hoge;
/**
*Un cas où vous souhaitez simuler uniquement certaines méthodes de la classe appelée à partir de la classe cible de test.
*Le test échoue.
*/
@Test
public void test() {
new Expectations(hoge) {{
hoge.getHogeUpper();
result = "HOGE";
}};
String actual = sample.getHoge();
assertThat(actual, is("hogeHOGE")); //réel devient nul HOGE
}
}
Étant donné que la classe testée utilise Inject, j'essaierais normalement d'injecter des instances avec @Tested et @Injectable dans JMockit, mais cela entraînerait l'échec du test. La raison en est que @Injectable videra toutes les méthodes Hoge.
public class SampleTest2 {
Sample sample = new Sample();
/**
*Un cas où vous souhaitez simuler uniquement certaines méthodes de la classe appelée à partir de la classe cible de test.
*Le test réussit.
* @throws Exception
* @throws NoSuchFieldException
*/
@Test
public void test() throws NoSuchFieldException, Exception {
Hoge hoge = new Hoge();
new Expectations(hoge) {
{
hoge.getHogeUpper();
result = "HOGE";
}
};
//Définissez le hoge partiellement moquée dans le champ privé de Sample
Field field = sample.getClass().getDeclaredField("hoge");
field.setAccessible(true);
field.set(sample, hoge);
String actual = sample.getHoge();
assertThat(actual, is("hogeHOGE"));
}
}
Voir ci-dessous pour plus d'informations sur le Mock partiel. https://jmockit-ja.nyamikan.net/tutorial/Mocking.html#partial Le test réussit en définissant l'instance Mocked Mock partiellement sur la classe cible de test par réflexion.
Dans les anciennes versions de JMockit, seule une partie de celui-ci était MockUp
Recommended Posts