2017年12月12日 星期二

Jersey Test Framework 在 JUnit 5 的暫時解法

本來 Jersey Test Framework 是對應 JUnit 4 使用的 Jersey 測試環境
如果開發環境升級到 JUnit 5 的話,就會出現像下述這樣的 NullPointerException 的狀況。

java.lang.NullPointerException
     at org.glassfish.jersey.test.JerseyTest.target(JerseyTest.java:564)
     at org.glassfish.jersey.test.JerseyTest.target(JerseyTest.java:578)

而參考了被發在 Github 上的 bug [1],在 JUnit 5 上,可以先暫時以這種方式繞過問題。

@TestInstance(value = Lifecycle.PER_CLASS)
public class MyTest extends JerseyTest {
    @BeforeAll
    public void prepareEnvironment() throws Exception {
        super.setUp();
    }
  
    @AfterAll
    public void clearEnvironment() throws Exception {
        super.tearDown();
    }
}

其中 @TestInstance 可以參考 [2],主要是因為 @BeforeAll 和 @AfterAll 本來應該要是 static method
但因為內容要呼叫 super,因此 method 無法做成 static method
就要依靠 @TestInstance 來讓 non-static method 可以標注 @BeforeAll、@AfterAll。

參考資料
  1. JerseyTest is not compatible with JUnit 5
  2. Allow @BeforeAll and @AfterAll methods to be non-static

沒有留言: