一些,这是猜测和炒作我的一部分,但它可能会有所帮助。你可以尝试使用Jersey Test Framework与InMemoryTestContainerFactory
:
它始于新泽西的应用和直接调用内部API来处理由测试框架提供的客户端创建请求。没有涉及网络通信。这个容器不支持servlet和其他容器相关的功能,但它是简单单元测试的完美选择。
它看起来像使用它,你需要做的是延长JerseyTest
,然后覆盖getTestContainerFactory()
和遵循的其他说明,如:
public class EmployeeResourceTest extends JerseyTest {
@Override
protected Application configure() {
// set up employee resource with mock dependencies etc...
return new ResourceConfig().registerInstances(employeeResource);
}
@Test
public void getAllEmployees() {
final String response = target("getallemployees").request().get(String.class);
// assert etc...
}
}
我configure()
使用registerInstances
代替registerClasses
因为它看起来像你可以提供一个现成的Resource
,但设置任何模拟依赖你可能需要 - 虽然我没有尝试过这个我自己。
测试类有点不灵活,因为您只能在configure()
方法中一次性设置依赖关系,因此可能需要使用MockitoJUnitRunner
进行调查 - 尽管我不确定它是否可以与JerseyTest
继承。它可以让你做每一@Test
方法添加行为嘲笑,例如:
@Mock
private EmployeeResourceDependency dependency;
@InjectMocks
private EmployeeResource employeeResource;
// configure() as above but without mock setup up etc...
@Test
public void getAllEmployees() {
given(dependency.getEmployees()).willReturn(...);
// etc...
但是就像我说可能不可能将他们在所有混合。
哪个杰克逊版本给你用这个?因为Feature.INDENT_OUTPUT不被识别... – SteveSt
杰克逊版本1.9.4 –
嗯,这实际上工作:),唯一的问题是,我得到整个实体对象为JSON字符串,它看起来像这样:'{“rawType” : “的java.util.ArrayList”, “类型”:{ “actualTypeArguments”:[ “dev.entities.Employee”], “rawType”:“java.util中。列表“},”实体“:[{”idEmployee“:0,”name“:”theName“,”surname“:”theSurname“}' 而原始的json看起来像这样: ''employee':[ {“idEmployee”:0,“name”:“theName”,“surname”:“theSurname”}' – SteveSt