Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RESTWebService中的Mockito_Java_Junit_Mockito - Fatal编程技术网

Java RESTWebService中的Mockito

Java RESTWebService中的Mockito,java,junit,mockito,Java,Junit,Mockito,基本上,我们在Junit中使用Mockito进行测试支持。我曾尝试在实际应用中使用mockito,并成功地使用了API 我的要求是创建一个webservice模拟,消费者将能够使用我的模拟服务,并将从模拟对象中检索数据。在我开发服务之后,相同的服务应该从acutal实现而不是模拟服务返回数据,而不需要任何代码更改 因此,基本上它应该像消费者首先调用任何服务一样工作。我的应用程序应该检查是否存在任何acutal实现,如果不存在,它应该去检查模拟服务实现 有人能帮我吗?没有更多的细节,我无法提供那么

基本上,我们在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服务的版本。