如何在测试类中为所有测试启动Jersey Test Container(Grizzly)一次?

我正在努力修复其中一个项目中的集成测试.目前,所有集成测试类都扩展了JerseyTest类.经过JerseyTest class我意识到它使用Junit的Before和After注释启动和停止每个测试方法的容器.

为什么这有必要?如果我们提起容器一次,运行测试并在结束时将其关闭,这还不够吗?

我们也使用Spring,上下文初始化需要时间.

在Junit4之前,我们通过使用布尔标志手动处理它来解决这个限制.

@Before
public void setup() {
  if(!containerStarted) {
   // start
   containerStarted = true;    
  }
 // else do nothing
}
最佳答案
您可以使用@BeforeClass和@AfterClass来覆盖JerseyTest的@Before和@After生命周期.这是代码模板:

public abstract class MyJerseyTest {
  private JerseyTest jerseyTest;
  public MyJerseyTest(){

  }

  @BeforeClass
  public void setUp() throws Exception {
    initJerseyTest() 
    jerseyTest.setUp();
  }

  @AfterClass
  public void tearDown() throws Exception {
    jerseyTest.tearDown();
  }

  private void initJerseyTest() {
    jerseyTest = new JerseyTest() {
      @Override
      protected Application configure() {
        // do somthing like
        enable(...);
        set(...);

        // create ResourceConfig instance
        ResourceConfig rc = new ResourceConfig();

        // do somthing like
        rc.property(...);
        rc.register(...);

        return rc;
      }
    };
  }
}

希望这是有帮助的.

转载注明原文:如何在测试类中为所有测试启动Jersey Test Container(Grizzly)一次? - 代码日志