为了账号安全,请及时绑定邮箱和手机立即绑定

@Mocked、@Injectable 和 @Capturing 之间有什么区别?

@Mocked、@Injectable 和 @Capturing 之间有什么区别?

翻阅古今 2022-06-23 15:44:57
首先,我定义了一个类,比如说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实例内注入。

区别现在应该很清楚了。


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 294 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信