【问题标题】:JerseyTest and JUnit throws NullPointerExceptionJerseyTest 和 JUnit 抛出 NullPointerException
【发布时间】:2014-11-12 10:59:45
【问题描述】:

我的球衣测试框架有一些问题。如果我使用 @Before 和 @After 注释,那么目标方法会抛出 NullPointerException。 我认为 JerseyTest 与 JUnit 一起工作?我的问题在哪里?

  • 球衣:2.12
  • JUnit:4.11

失败的代码:

public class MyResourceTest extends JerseyTest {
    @Before
    public void setUp() { }

    @After
    public void tearDown() { }

    @Override
    protected Application configure() {
        return new ResourceConfig(MyResource.class);
    }

    @Test
    public void SHOULD_RETURN_BAD_REQUEST() throws IOException {
        System.out.println(target("myPath"));
        assertEquals(1, 1);
    }
}

结果:

java.lang.NullPointerException 在 org.glassfish.jersey.test.JerseyTest.target(JerseyTest.java:566) 在 org.glassfish.jersey.test.JerseyTest.target(JerseyTest.java:580) 在 foo.bar.MyResourceTest.SHOULD_RETURN_BAD_REQUEST(MyResourceTest.java:43)

有效的代码:

public class MyResourceTest extends JerseyTest {
    @Override
    protected Application configure() {
        return new ResourceConfig(MyResource.class);
    }

    @Test
    public void SHOULD_RETURN_BAD_REQUEST() throws IOException {
        System.out.println(target("myPath"));
        assertEquals(1, 1);
    }
}

结果:

JerseyWebTarget { http://localhost:9998/myPath }

【问题讨论】:

    标签: java junit junit4 jersey-2.0 overriding


    【解决方案1】:

    您的方法似乎覆盖了父 JerseyTest 中所做的一些重要初始化。 尝试以不同的方式命名它们。例如:

    @Before
    public void setUpChild() { }
    
    @After
    public void tearDownChild() { }
    

    【讨论】:

    • 仅供参考:setUp() 和 tearDown() 是 Netbeans 为 Before 和 After 方法自动生成的名称。重命名这些解决了我的问题(使用 NB 8.1 和 Jersey 2.22)所以这仍然是相关的。
    • 很高兴知道,不知道它是生成的。不使用 Netbeans。这解释了对这个问题的更高兴趣。
    • 多么棒的收获!我对这个疯了!
    【解决方案2】:

    我来到这里是因为我使用的是 JUnit 5,但似乎在 JerseyTest setup/tearDown 方法上没有看到 @Before 和 @After 注释。我不得不覆盖它们并使用新的 JUnit 5 注释

    public class MyResourceTest extends JerseyTest {
        @BeforeEach
        @Override
        public void setUp() throws Exception {
            super.setUp();
        }
    
        @AfterEach
        @Override
        public void tearDown() throws Exception {
            super.tearDown();
        }
    
        @Override
        protected Application configure() {
            return new ResourceConfig(MyResource.class);
        }
    
        @Test
        public void SHOULD_RETURN_BAD_REQUEST() throws IOException {
            System.out.println(target("myPath"));
            assertEquals(1, 1);
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多