gpt4 book ai didi

java - @BeforeClass 注释在动态创建的测试套件中不起作用

转载 作者:行者123 更新时间:2023-11-30 11:17:06 24 4
gpt4 key购买 nike

我的JUnit 测试 很少,我想决定在运行时使用哪一个。我在 SO 上检查了以前的答案,最后动态创建了测试套件。

这个类是我的应用程序开始的地方。我有 CustomTestSuite 类和 Main 类将测试添加到我的自定义套件。

public class Main {

public static junit.framework.TestSuite suite()
{
CustomTestSuite suite = new CustomTestSuite();

suite.addTest(new JUnit4TestAdapter(BTest.class));
suite.addTest(new JUnit4TestAdapter(ATest.class));

return suite;
}
}

CustomTestSuite.java

public class CustomTestSuite extends TestSuite {

@BeforeClass
public static void setUp() throws Exception {
System.out.println("Before class test");
}

@After
public void tearDown() throws Exception {
System.out.println("After class test");
}

}

我的ATestBTest 是简单的测试类,我将只显示ATest 作为示例:

public class ATest{

@Test
public void testMethod() {
System.out.println("testMethod");
}

}

当我从Main 类开始运行我的项目时,预计会先运行带有@BeforeClass 的方法,进行测试,然后运行带有 的方法>@AfterClass 注释。

测试工作正常,但它跳过了 setUp 方法和 tearDown 方法。我尝试了 @Before@BeforeClass 注释。

我对套件结构感到困惑。任何帮助,将不胜感激。谢谢

最佳答案

@Before@BeforeClass 应该在 Test 类中使用,而不是在 TestSuite 中使用。如果需要对多个测试类使用通用的setUptearDown,则将这两种方法放在父类(super class)中,并通过ATest 扩展该父类(super class)> 和 BTest 测试类。而且套件可以通过 @RunWith@SuiteClasses 注释构建和运行,不需要 CustomTestSuite 类。

所以变化如下。

CustomTestSuite 变成了 TestSuper

public class TestSuper {
@BeforeClass
public static void setUp() throws Exception {
System.out.println("Before class test");
}

@After
public void tearDown() throws Exception {
System.out.println("After class test");
}
}

现在 ATest 扩展了 TestSuper

public class ATest extends TestSuper {
@Test
public void testMethod() {
System.out.println("testMethod");
}
}

同样,BTest 也应该扩展TestSuper。只需将 @RunWith@SuiteClasses 注释添加到 Main 类,如下所示,然后运行 ​​Main

@RunWith(Suite.class)
@SuiteClasses({ATest.class, BTest.class})
public class Main {

}

尝试进行这些更改。

关于java - @BeforeClass 注释在动态创建的测试套件中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24540951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com