在Jersey Testing Framework中独立测试多个提供者

时间:2015-07-03 00:12:09

标签: java junit jersey-2.0

我的几次测试都出现了间歇性问题。我和Googling一起做了很多头发,并没有设计出解决方案。

给出以下简化的测试源:

@RunWith(Parameterized.class)
public class JsonValueObjectReaderWriterITTest extends JerseyTest {

    @Parameterized.Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][]{
            { Jackson1JsonValueObjectReaderWriter.class },
            { Jackson2JsonValueObjectReaderWriter.class },
            { GsonJsonValueObjectReaderWriter.class }
        });
    }

    public JsonValueObjectReaderWriterITTest(final Class<?> cls) {
        super(new ResourceConfig(cls, JacksonJsonProvider.class, UserResource.class));
    }

    @Test
    public void ensureInvalidEntityConversionReturnsError() throws Exception {
        UserV1 user = new UserV1();
        user.name = "John Smith";

        Response response = target()
                .request("application/json")
                .post(Entity.entity(user, MediaType.valueOf(UserV1.TYPE_STR+".v1+json")));
        assertThat(response.getStatus(), is(400));
        assertThat(response.readEntity(String.class), anyOf(
                is(equalTo("{\"message\":\"username may not be null\"}")),
                is(equalTo("{\"message\":\"email may not be null\"}"))
        ));
    }

    @Path("/")
    public static class UserResource {
        @POST
        public Response post(@Valid final UserV1 user) {
            assertThat(user.name, is(equalTo("John Smith")));
            assertThat(user.username, is(equalTo("john.smith")));
            assertThat(user.email, is(equalTo("john.smith@example.com")));

            return Response.created(URI.create("/abc123")).build();
        }
    }
}

任何人都可以指出我正确的方向,为什么我的静态data()方法中提供的测试提供者无法间歇注册。实际上,我指出了这三个提供者。在任何给定的测试运行期间,零或更多将无法运行。但如果独立测试,它们都可以正常工作。如果需要进一步澄清,请告诉我,我会提供所需的信息。如果可能的话,我宁愿不要混淆这个问题。

提前致谢!

更新

似乎JacksonJsonProvider偶尔优先于我的提供程序实现,并将空对象传递给控制器​​。向每个提供程序添加@Priority(Integer.MAX_VALUE)可以可靠地解决问题,但这样做会感觉很脏,特别是因为这是一个库。是否有任何方法可以覆盖优先级以进行测试,但是否则未指定?

0 个答案:

没有答案