Java jUnit:在任何测试类之前运行的测试套件代码

2022-09-02 03:13:40

我有一个测试套件类:

@RunWith(Suite.class)
@Suite.SuiteClasses({
    GameMasterTest.class,
    PlayerTest.class,
})
public class BananaTestSuite { 

在包含实际测试的任何类之前,我需要使用什么注释来使此类中的函数运行?现在,我正在这样做,它有效,但它并不像它可能的那样可读:

static {
    try {
        submitPeelAction = new Player(new GameMaster(1)).getClass().getDeclaredMethod("submitPeelAction");
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
    submitPeelAction.setAccessible(true);
}

我试过了,但它不起作用。@BeforeClass


答案 1

创建一个超级测试类,其中包含用 @BeforeClass 注释的方法。扩展该类中的所有测试类,例如,

@Ignore
public class BaseTest {
    @BeforeClass
    public static void setUpBaseClass() {
        //Do the necessary setup here
    }
}

此方法将在子类中的任何@BeforeClass带批注的方法之前运行:。确保此方法名称未在任何子类中使用,以防止重影。

如果只需要运行一次(例如,如果要创建/初始化供所有测试使用的大型资源),请在超类中设置一个标志以检查方法是否运行。

此设计还将确保在更改测试运行程序时,无需更改任何其他内容。


答案 2

@Before 用于 setUp() @After 用于拆解方法。

编辑:经过一些测试,我发现@Before@After不适用于测试套件。在你的例子中,你应该使用@BeforeClass和静态方法来封装初始化代码。

@RunWith(Suite.class)
@SuiteClasses( { ContactTest.class })
public class AllTests {

    @BeforeClass
    public static void init() {
        System.out.println("Before all");
    }

}

推荐