问题:我有 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方法必须是静态的。
这是处理这种情况的愚蠢方式吗?如果是这种情况,你能否推荐一种不同的做法。
答案 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);
}
}
我强烈鼓励您重新考虑是否需要在测试中使用继承。这对我来说似乎是一种代码味道,并表明你的测试可能不够集中。