我曾经使用过JUnit和Mocks,但我想知道,JUnit中的Mocks和Stub之间有什么区别,以及如何在JUnit,Java中使用Stub?
作为具有EasyMock,Mockito等的Mocks,Stubs在Java中使用什么?
请提供Java中的存根示例代码。
希望这个答案对您有帮助
香港专业教育学院以前读过,并没有帮助:(
提问者有责任提供示例代码和他们已完成的现有研究。 这个问题需要改进。
我认为框架或技术都没有关系。 cks和存根可以定义如下。
存根是系统中现有依赖项(或协作者)的可控替代。 通过使用存根,您可以测试代码而无需直接处理依赖项。
模拟对象是系统中的伪造对象,它决定单元测试是通过还是失败。 它通过验证被测对象是否与假对象进行了预期的交互来实现。
也许这些图像可以阐明存根与模拟物之间的相互作用。
存根
嘲笑
您的意思是,当我们使用存根时,我们不创建存根类的对象吗?
按照@Sergey Lagutin的答案。您创建存根以馈送到CUT(测试中的代码/类)-存根是依赖项替换。
要在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";
}
}
您的意思是我只再次写了一些代码,但是这次更简单了,为此编写了一个测试用例?接口,类和测试类?而已?
@Hamid是的,你说得对。如果您想使用模拟,我想有些类需要与外部服务或数据库进行交互。为了避免这些交互,您可以编写比原始类更容易实现的存根。
您介意给我一个例子吗?怎么容易?
@Hamid,因为您可以写几行代码来实现存根类。在编写单元测试时,您将专注于目标类,而不想测试目标类的依赖关系。因此,您应该了解为什么要使用模拟,存根等。
为了减少实现存根的工作,您仍然可以使用库。 anystub-guides.github.io有一些类可以对HTTP流量和db-access进行存根