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

2022-09-02 05:05:01

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

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


答案 1

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

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

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

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

存根 Stub

模拟 Mock


答案 2

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

推荐