Wenn Sie nur einige Methoden der Klasse verspotten möchten, die von der zu testenden Klasse aufgerufen wurden
JMockit 1.46
public class Sample {
@Inject
Hoge hoge;
public String getHoge() {
return hoge.getHoge() + hoge.getHogeUpper();
}
}
Ich verwende die Methode von Hoge, die aus der zu testenden Klasse injiziert wurde. Dies ist eine Problemumgehung, wenn Sie den Hoge teilweise verspotten möchten.
public class Hoge {
public String getHoge() {
return "hoge";
}
public String getHogeUpper() {
return null;
}
}
Bitte nehmen Sie an, dass getHoge implementiert wurde und getHogeUpper noch nicht implementiert wurde.
public class SampleTest {
@Tested
Sample sample;
@Injectable
Hoge hoge;
/**
*Ein Fall, in dem Sie nur einige Methoden der Klasse verspotten möchten, die von der Testzielklasse aufgerufen wurden.
*Der Test schlägt fehl.
*/
@Test
public void test() {
new Expectations(hoge) {{
hoge.getHogeUpper();
result = "HOGE";
}};
String actual = sample.getHoge();
assertThat(actual, is("hogeHOGE")); //Ist wird null HOGE
}
}
Da die zu testende Klasse Inject verwendet, würde ich normalerweise versuchen, Instanzen mit @Tested und @Injectable in JMockit zu injizieren, aber dies würde dazu führen, dass der Test fehlschlägt. Der Grund ist, dass @Injectable alle Hoge-Methoden leer macht.
public class SampleTest2 {
Sample sample = new Sample();
/**
*Ein Fall, in dem Sie nur einige Methoden der Klasse verspotten möchten, die von der Testzielklasse aufgerufen wurden.
*Der Test ist erfolgreich.
* @throws Exception
* @throws NoSuchFieldException
*/
@Test
public void test() throws NoSuchFieldException, Exception {
Hoge hoge = new Hoge();
new Expectations(hoge) {
{
hoge.getHogeUpper();
result = "HOGE";
}
};
//Stellen Sie den teilweise verspotteten Hoge in das private Feld von Sample ein
Field field = sample.getClass().getDeclaredField("hoge");
field.setAccessible(true);
field.set(sample, hoge);
String actual = sample.getHoge();
assertThat(actual, is("hogeHOGE"));
}
}
Weitere Informationen zum partiellen Mock finden Sie weiter unten. https://jmockit-ja.nyamikan.net/tutorial/Mocking.html#partial Der Test ist erfolgreich, indem die teilweise verspottete Mock-Instanz durch Reflexion auf die Testzielklasse gesetzt wird.
In älteren Versionen von JMockit wurde nur ein Teil davon mit MockUp
Recommended Posts