如何在 JUnit 和 Java 中使用存根?

新手上路,请多包涵

我曾使用过 JUnit 和 Mocks,但我想知道,JUnit 中的 Mock 和 Stub 之间有什么区别,以及如何在 JUnit、Java 中使用 Stub?而作为有EasyMock、Mockito等的Mocks,Stubs在Java中有什么用呢?

请为 Java 中的存根提供一些示例代码。

原文由 Wooopsa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 593
2 个回答

在我看来,框架或技术无关紧要。模拟和存根可以定义如下。

存根是系统中现有依赖项(或协作者)的可控替代品。通过使用存根,您可以在不直接处理依赖项的情况下测试您的代码。

模拟对象是系统中的假对象,它决定单元测试是否通过。它通过验证被测对象是否按预期与假对象进行交互来实现。

也许这些图像可以阐明存根和模拟之间的交互。

存根 存根

嘲笑 嘲笑

原文由 Michael Baker 发布,翻译遵循 CC BY-SA 4.0 许可协议

要在 junit 中使用存根,您不需要任何框架。

如果你想存根一些接口只是实现它:

 interface Service {
    String doSomething();
}

class ServiceStub implements Service {
    public String doSomething(){
        return "my stubbed return";
    }
}

然后创建新的存根对象并将其注入测试对象。

如果你想存根一个具体类,创建子类并覆盖存根方法:

 class Service {
    public String doSomething(){
        // interact with external service
        // make some heavy computation
        return "real result";
    }
}

class ServiceStub extends Service {
    @Override
    public String doSomething(){
        return "stubbed result";
    }
}

原文由 Sergii Lagutin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题