从org.glassfish.jersey.test.JerseyTest@test(groups={“integration”})到TestNG的NPE
我有一个gradle项目,它引入了Jersey 2.13,通过TestNG进行测试,并利用Jersey测试框架。通过@test注释作为普通单元测试运行的任何测试都可以正常运行。如果我试图通过@Test(groups={“integration”})将Jersey测试放入TestNG组中,测试将失败,NPE来自org.glassfish.Jersey.Test.JerseyTest。未利用Jersey测试框架的测试在@Test(groups={“integration”})中正确执行时不会出现此问题。知道为什么TestNG在组约束下不能正确启动这个容器吗 这是项目的执行部分 格雷德尔先生从org.glassfish.jersey.test.JerseyTest@test(groups={“integration”})到TestNG的NPE,jersey,testng,Jersey,Testng,我有一个gradle项目,它引入了Jersey 2.13,通过TestNG进行测试,并利用Jersey测试框架。通过@test注释作为普通单元测试运行的任何测试都可以正常运行。如果我试图通过@Test(groups={“integration”})将Jersey测试放入TestNG组中,测试将失败,NPE来自org.glassfish.Jersey.Test.JerseyTest。未利用Jersey测试框架的测试在@Test(groups={“integration”})中正确执行时不会出现此问
dependencies {
...
compile 'org.glassfish.jersey.core:jersey-server:2.13'
compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.13'
compile 'org.glassfish.jersey.media:jersey-media-json-jackson:2.13'
...
testCompile 'org.testng:testng:6.8.8'
testCompile 'org.glassfish.jersey.test-framework:jersey-test-framework-core:2.13'
testCompile 'org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-jetty:2.13'
}
test {
useTestNG() { excludeGroups 'integration' }
}
task integrationTest(type: Test, dependsOn: 'test') {
useTestNG() { includeGroups 'integration' }
}
失败的集成测试
public class JerseyTestNGTest extends JerseyTestNg.ContainerPerClassTest {
@Path("hello")
public static class HelloResource {
@GET
public String getHello() { return "Hello World!"; }
}
@Override
protected Application configure() {
return new ResourceConfig(HelloResource.class);
}
@Test
public void notIntegrationTest() {
// works like a champ...
doIt();
}
@Test(groups = {"integration"})
public void integrationTest() {
// NPEs out the wazoo
doIt();
}
private void doIt() {
final String hello = target("hello").request().get(String.class);
assertEquals("Hello World!", hello);
}
}
眼泪的痕迹
$ gradle integrationTest
...
:integrationTest
Gradle test > jerseywtf.JerseyTestNGTest.integrationTest FAILED
java.lang.NullPointerException at JerseyTestNGTest.java:29
2 tests completed, 1 failed
:integrationTest FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':integrationTest'.
> There were failing tests. See the report at: file:///Users/robert.kuhar/work/jerseywtf/build/reports/tests/index.html
...
BUILD FAILED
实际的堆栈跟踪
java.lang.NullPointerException
at org.glassfish.jersey.test.JerseyTest.target(JerseyTest.java:566)
at org.glassfish.jersey.test.JerseyTest.target(JerseyTest.java:580)
at jerseywtf.JerseyTestNGTest.doIt(JerseyTestNGTest.java:29)
at jerseywtf.JerseyTestNGTest.integrationTest(JerseyTestNGTest.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
怎么回事
整个项目都在github上,如果您有兴趣看到它运行,或者失败(视情况而定):Crickets?有人使用Jersey测试框架吗?也许这就是我犯错误的地方。无论如何,这感觉像是一个JerseyTest bug,所以我提出了一个问题:我有同样的问题,但是使用maven。这似乎真的是一个bug。当我从命令行用测试运行我的jar时,我也遇到了同样的问题。当我从eclipse运行时:没问题。。。我不使用gradle或maven