我没有 JUnit Tests ,我想决定在运行时使用哪一个。我在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");
}
}
我的 ATest 和 BTest 是简单的测试类,我只会将 ATest 显示为示例:
public class ATest{
@Test
public void testMethod() {
System.out.println("testMethod");
}
}
当我从 Main 类开始运行我的项目时,应该首先使用@BeforeClass
运行方法,进行测试,然后使用@AfterClass
注释运行该方法
测试工作正常,但它会跳过setUp
方法和tearDown
方法。我尝试了@Before
和@BeforeClass
注释。
我对套件结构感到困惑。任何帮助,将不胜感激。 谢谢
答案 0 :(得分:1)
@Before
和@BeforeClass
应该在Test
课程中使用,而不是TestSuite
。如果需要为多个Test类提供公共setUp
和tearDown
,那么将这两个方法放在一个超类中,并通过ATest
和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 {
}
了解这些变化。