我怎么能有一个junit @Beforeclass&&我的TestSuite界面中的@Afterclass?

时间:2017-10-22 10:51:45

标签: java junit interface

问题:我有 TestSuite 的自定义界面。

public interface TestSuite {

  abstract void setupRestAssuredForSuite();
  abstract void restoreDatabase();
  abstract void executeSuitePreparation();
  abstract void executeSuiteTearDown();

}

如何让我的界面包含来自junit的@BeforeClass和@AfterClass注释以及我的TestSuite接口实现以确认这些注释?我应该完全这样做吗?我很想知道接口是否可以实现这一点。

我是否需要在每个实现TestSuite的类中手动编写注释?或者我可以在没有注释的情况下运行executeSuitePreparation();executeSuiteTearDown();方法,因为它们以某种方式存在于TestSuite本身中,我只需要实现setup / teardown背后的代码。

public class Foo extends Bar implements TestSuite

据我所知,@ Beclass和@Afterclass方法必须是静态的。

这是处理这种情况的愚蠢方式吗?如果是这种情况,你能否推荐一种不同的做法。

1 个答案:

答案 0 :(得分:1)

您尝试将接口用作mixins。接口不是mixins。

您可以做的最好的事情就是在界面中编写静态方法,以执行所需的设置:

public interface TestSuite {

  abstract void setupRestAssuredForSuite();
  ...


  static SomeReturn setup()
  {
      Database database = new Database();
      ...
      return database;
  }

  static void teardown(SomeType foo)
  {
      foo.reset();
  }
}

然后在您的具体实现中,您可以:

public class Foo extends Bar implements TestSuite
{
    private static Foo foo;

    @BeforeClass
    public void beforeClass()
    {
        foo = TestSuite.setup();
    }

    @BeforeClass
    public void beforeClass()
    {
        TestSuite.teardown(foo);
    }
}

强烈鼓励您重新考虑是否需要在测试中使用继承。这对我来说似乎是一种代码味道,并表明你的测试可能不够集中。