首先,我定义了一个类,比如说Robot.public class Robot { private Vision vision; public Object recognizeObject(List<List<Integer>> frames) { vision = new Vision(); return vision.recognize(frames); }}Class ofRobot有几个依赖项,其中之一是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
1 回答
莫回无
TA贡献1865条经验 获得超7个赞
@Injectable
模拟单个实例(例如测试方法的参数)。并非在测试上下文中使用的每个实例。@Mocked
将在测试上下文中创建的每个实例上模拟所有类方法和构造函数。@Capturing
与 基本相同@Mocked
,但它将模拟扩展到注释类型的每个子类型(方便!)。
的另一个区别@Injectable
是,只有标有此注释的字段才会考虑在@Tested
实例内注入。
区别现在应该很清楚了。
添加回答
举报
0/150
提交
取消