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