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

u3r8eeie  于 2023-02-20  发布在  Java
关注(0)|答案(3)|浏览(145)

我曾经使用过JUnit和Mocks,但我想知道,JUnit中的Mocks和Stub有什么区别,以及如何在JUnit、Java中使用Stub?作为具有EasyMock、Mockito等的Mocks,Stub在Java中使用什么?
请给予一些例子代码存根在Java中。

agxfikkp

agxfikkp1#

在我看来,框架和技术并不重要,模拟和存根可以定义如下。
存根是对系统中现有依赖项(或协作者)的可控制替换。通过使用存根,您可以在不直接处理依赖项的情况下测试代码。
模拟对象是系统中的一个伪对象,它通过验证被测对象是否按预期与伪对象交互来确定单元测试是否通过。
也许这些图像可以澄清存根和mock之间的交互。

存根

模拟

w1jd8yoj

w1jd8yoj2#

要在junit中使用存根,你不需要任何框架。
如果你想stub某个接口,只需实现它:

interface Service {
    String doSomething();
}

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

然后创建新的stub对象并将其注入到测试对象中。
如果你想stub一个具体的类,创建子类并覆盖stub方法:

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

1l5u6lss3#

一般来说-模拟意味着实现一些行为,存根-只是提供一些数据。换句话说,当你需要证明它改变/保持一些状态时,最好使用模拟这个词
当你的类只公开内部状态时,使用stub这个词。实际上你可以在任何地方使用mock,stub只是mock的子集

相关问题