Java RESTWebService中的Mockito
基本上,我们在Junit中使用Mockito进行测试支持。我曾尝试在实际应用中使用mockito,并成功地使用了API 我的要求是创建一个webservice模拟,消费者将能够使用我的模拟服务,并将从模拟对象中检索数据。在我开发服务之后,相同的服务应该从acutal实现而不是模拟服务返回数据,而不需要任何代码更改 因此,基本上它应该像消费者首先调用任何服务一样工作。我的应用程序应该检查是否存在任何acutal实现,如果不存在,它应该去检查模拟服务实现Java RESTWebService中的Mockito,java,junit,mockito,Java,Junit,Mockito,基本上,我们在Junit中使用Mockito进行测试支持。我曾尝试在实际应用中使用mockito,并成功地使用了API 我的要求是创建一个webservice模拟,消费者将能够使用我的模拟服务,并将从模拟对象中检索数据。在我开发服务之后,相同的服务应该从acutal实现而不是模拟服务返回数据,而不需要任何代码更改 因此,基本上它应该像消费者首先调用任何服务一样工作。我的应用程序应该检查是否存在任何acutal实现,如果不存在,它应该去检查模拟服务实现 有人能帮我吗?没有更多的细节,我无法提供那么
有人能帮我吗?没有更多的细节,我无法提供那么多的帮助,但是 您可以创建一个web服务接口,其中包含所有要公开的方法。然后,您可以使用一个具体的类来实现该接口,以便在实际应用程序中使用。然后可以通过模拟web服务接口来执行消费者测试
interface WebService {
int foo();
}
class RESTWebService implements WebService {
int foo() { return 1;}
}
class Consumer {
private WebService webservice;
public Consumer(WebService webService) {
this.webService = webService;
}
}
//Production code
WebService realService = new RESTWebService();
//For testing
WebService testService = mock(WebService.class);
//Spring configuration
<bean id="Consumer" class="Consumer">
<constructor-arg>
<bean class="RESTWebService">
</constructor-arg>
</bean>
//Test Spring configuration
<bean id="Consumer" class="Consumer">
<constructor-arg>
<bean id="testService">
</constructor-arg>
</bean>
<bean id="testService" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="WebService"/>
</bean>
接口Web服务{
int foo();
}
类RESTWebService实现WebService{
int foo(){return 1;}
}
阶级消费者{
私有网络服务;
公共消费者(Web服务Web服务){
this.webService=webService;
}
}
//生产代码
WebService realService=新的RESTWebService();
//用于测试
WebService testService=mock(WebService.class);
//弹簧配置
//测试弹簧配置
这是可行的,但唯一的问题是当真正的实现准备就绪时,我们需要将代码从testservice更改为realservice。但是我的要求不允许我更改代码。当我们实现真正的实现时,同样的代码应该可以工作。因此,它的工作原理就像调用任何服务一样,如果真正的实现已经准备好,它应该选择相同的,如果没有,它应该选择mock。因此,我们可能会有一个接口和两个实现类。但是优先级应该始终放在真正的实现类上。我们在项目中使用spring。在加载上下文时,我们是否有任何sprng或mockito注释来映射实现?@JosephJohny您所描述的是通过依赖注入解决的。我已经为生产和测试添加了一个示例Spring配置文件。这样,用户代码就不会改变,您只需根据环境(例如测试、开发、产品)更改您使用的Web服务的版本。