Java – 如何在JUnit中使用存根

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

请给出Java中Stubs的一些示例代码。

谢谢!

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

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

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

模拟对象是系统中的假对象,用于确定unit testing是通过还是失败。 它通过validation被测对象是否与假对象按预期交互来实现。

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

存根 存根

嘲笑 嘲笑