如何在JerseyTest套件中使用@BeforeClass和@AfterClass

时间:2016-07-29 09:14:14

标签: java junit junit4 jersey-2.0 jersey-test-framework

事实证明,JUnit希望@BeforeClass@AfterClass是静态的,并且这与JerseyTest的configure方法覆盖相处并不好。是否有一种已知的方法来配置Jersey应用程序,同时仍然能够访问JUnit的实用程序方法?

public class MyControllerTest  extends JerseyTest {
  @BeforeClass
  public static void setup() throws Exception {
    target("myRoute").request().post(Entity.json("{}"));
  }
  @Override
  protected Application configure() {
      return new AppConfiguration();
  }
}

因此beforeClass需要是静态的,target因其实例方法性质而无法调用。在尝试使用构造函数时,事实证明configureconstructor之后运行,这可以防止执行设置请求,并因此自然失败。

任何建议都非常感谢,谢谢!

2 个答案:

答案 0 :(得分:1)

我们在几种情况下所做的是为了避免在这种情况下进行繁重的设置是使用布尔标志来有条件地运行该设置。

public class MyControllerTest extends JerseyTest {

  private static myRouteSetupDone = false;

  @Before
  public void setup() throws Exception {
    if (!myRouteSetupDone) {
      target("myRoute").request().post(Entity.json("{}"));
      myRouteSetupDone = true;
    }
  }
  @Override
  protected Application configure() {
      return new AppConfiguration();
  }
}

答案 1 :(得分:-2)

@Before 不需要 static 修饰符,并且会在每个测试方法之前执行。