从org.glassfish.jersey.test.JerseyTest@test(groups={“integration”})到TestNG的NPE

从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”})中正确执行时不会出现此问

我有一个gradle项目,它引入了Jersey 2.13,通过TestNG进行测试,并利用Jersey测试框架。通过@test注释作为普通单元测试运行的任何测试都可以正常运行。如果我试图通过@Test(groups={“integration”})将Jersey测试放入TestNG组中,测试将失败,NPE来自org.glassfish.Jersey.Test.JerseyTest。未利用Jersey测试框架的测试在@Test(groups={“integration”})中正确执行时不会出现此问题。知道为什么TestNG在组约束下不能正确启动这个容器吗

这是项目的执行部分

格雷德尔先生

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