首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“模拟”、“注入”和“捕获”之间有什么区别?

“模拟”、“注入”和“捕获”之间有什么区别?
EN

Stack Overflow用户
提问于 2019-02-16 15:37:38
回答 1查看 7.4K关注 0票数 8

首先,我定义了一个类,比如Robot

代码语言:javascript
复制
public class Robot {

    private Vision vision;

    public Object recognizeObject(List<List<Integer>> frames) {
        vision = new Vision();
        return vision.recognize(frames);
    }
}

Robot的类有几个依赖项,其中一个是Vision

代码语言:javascript
复制
public class Vision {

    public Object recognize(List<List<Integer>> frames) {
        // do magic stuff, but return dummy stuff
        return null;
    }

}

然后,在测试类中,我只测试recognize()的调用。

代码语言:javascript
复制
@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是可能的,而不能被其他的情况所取代?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-16 16:03:46

  • @Injectable模拟单个实例(例如,测试方法的参数)。并不是测试上下文中使用的每个实例。
  • @Mocked将在测试上下文中创建的每个实例上模拟所有类方法和构造函数。
  • @Capturing@Mocked基本相同,但它将模拟扩展到带注释的类型的每个子类型(方便!)。

@Injectable的另一个不同之处在于,只有标记有此注释的字段才会考虑在@Tested实例中注入。

现在差别应该很明显了。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54724739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档