问题:我有一个用于TestSuite的自定义界面。
public interface TestSuite {
abstract void setupRestAssuredForSuite();
abstract void restoreDatabase();
abstract void executeSuitePreparation();
abstract void executeSuiteTearDown();
}
如何让我的界面包含来自junit的@BeforeClass和@AfterClass批注以及我对TestSuite接口的实现,以确认它们?我应该完全用另一种方式吗?我很想知道接口是否可以实现这种功能。
我需要在实现TestSuite的每个类中手动编写注释吗?还是可以在没有注释的情况下运行
executeSuitePreparation();
和executeSuiteTearDown();
方法,因为它们以某种方式存在于TestSuite本身中,而我只需要实现设置/拆卸的代码即可。public class Foo extends Bar implements TestSuite
据我所知@Beforeclass和@Afterclass方法必须是静态的。
这是解决情况的一种愚蠢的方式吗?如果是这种情况,您能推荐一种不同的方法吗?
最佳答案
您正在尝试将接口用作mixin。接口不是mixin。
可能最好的办法是在您的界面中编写静态方法以完成所需的设置:
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);
}
}
我强烈建议您重新考虑是否需要在测试中使用继承。在我看来,这似乎是一种代码气味,它表明您的测试可能不够集中。