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

时间:2015-08-08 07:57:48

标签: java junit stub

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

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

3 个答案:

答案 0 :(得分:20)

在我看来,框架或技术并不重要。模拟和存根可以定义如下。

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

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

也许这些图像可以澄清存根与模拟之间的相互作用。

<强>存根 Stub

<强>模拟 Mock

答案 1 :(得分:15)

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

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

interface Service {
    String doSomething();
}

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

然后创建新的存根对象并将其注入测试对象。<​​/ p>

如果要存根具体类,请创建子类并覆盖存根方法:

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";
    }
}

答案 2 :(得分:0)

通常-模拟意味着实现某些行为,存根-仅提供一些数据。换句话说,当您需要证明它更改/保留某些状态时,最好使用工作模拟

当您的类仅公开内部状态时,请使用存根(stub)一词。确实,您可以在任何地方使用模拟,而存根只是模拟的子集