我正在使用“Jersey测试框架”对我的Web服务进行单元测试。
下面是我的资源类:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
// The Java class will be hosted at the URI path "/helloworld"
@Path("/helloworld")
public class class HelloWorldResource {
private SomeService service;
@GET
@Produces("text/plain")
public String getClichedMessage() {
// Return some cliched textual content
String responseFromSomeService = service.getSomething();
return responseFromSomeService;
}
}
如何在单元测试中模拟SomeService?
2条答案
按热度按时间lrl1mhuk1#
请参阅以下更新:您不需要
Factory
如果您使用的是Jersey 2,一个解决方案是使用Custom Injection and Lifecycle Management功能(使用HK2-Jersey dist附带的)。当然,还需要一个Mocking框架。我要用莫奇托。
首先创建一个带有模拟示例的Factory:
然后使用
AbstractBinder
将工厂绑定到接口/服务类,并注册绑定器。(以上链接都有介绍):看起来很多,但这只是一个选择。我不太熟悉这个测试框架,或者它是否有模拟注入的能力。
以下是完整的测试:
此测试的依赖性:
更新
所以在大多数情况下,你真的不需要一个
Factory
。您可以简单地将mock示例与其合约绑定:简单多了!
46qrfjad2#
下面是我如何使用Jersey 2.20,Spring 4.1.4 Release,Mockito 1.10.8和TestNG 6.8.8完成的。
你还需要这个类,它使上面的绑定代码更容易一些:
编辑为pr下面是我的test-context.xml的内容:
事实证明,我的test-context.xml既没有示例化任何bean,也没有扫描任何包,事实上,它根本没有做任何事情。我想我只是把它放在那里,以防我可能需要它。