【发布时间】:2019-02-16 15:37:38
【问题描述】:
首先,我定义一个类,比如说Robot。
public class Robot {
private Vision vision;
public Object recognizeObject(List<List<Integer>> frames) {
vision = new Vision();
return vision.recognize(frames);
}
}
Robot 的类有几个依赖项,其中之一是Vision。
public class Vision {
public Object recognize(List<List<Integer>> frames) {
// do magic stuff, but return dummy stuff
return null;
}
}
然后在测试类中,我简单测试一下recognize()的调用。
@RunWith(JMockit.class)
public class RobotTest {
@Test
public void recognizeObjectWithMocked(@Mocked final Vision vision) {
List<List<Integer>> frames = new ArrayList<>();
vision.recognize(frames);
new Verifications() {{
vision.recognize((List<List<Integer>>) any);
times = 1;
}};
}
@Test
public void recognizeObjectWithInjectable(@Injectable final Vision vision) {
List<List<Integer>> frames = new ArrayList<>();
vision.recognize(frames);
new Verifications() {{
vision.recognize((List<List<Integer>>) any);
times = 1;
}};
}
@Test
public void recognizeObjectWithCapturing(@Capturing final Vision vision) {
List<List<Integer>> frames = new ArrayList<>();
vision.recognize(frames);
new Verifications() {{
vision.recognize((List<List<Integer>>) any);
times = 1;
}};
}
}
基于这些测试,我认为@Mocked、@Injectable和@Capturing可以互换使用。
-
对吗?
-
如果答案是否定的,那么是否有任何情况只
@Mocked/@Injectable/@Capturing是可能的,不能被替换 另一个?
【问题讨论】:
标签: java unit-testing jmockit