3 回答
TA贡献1817条经验 获得超14个赞
是的,可以在测试套件中进行任何测试之前和之后可靠地运行设置和拆卸方法。让我用代码演示:
package com.test;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class})
public class TestSuite {
@BeforeClass
public static void setUp() {
System.out.println("setting up");
}
@AfterClass
public static void tearDown() {
System.out.println("tearing down");
}
}
因此,您的Test1类看起来像:
package com.test;
import org.junit.Test;
public class Test1 {
@Test
public void test1() {
System.out.println("test1");
}
}
...并且您可以想象Test2看起来很相似。如果运行TestSuite,您将获得:
setting up
test1
test2
tearing down
因此,您可以看到设置/拆卸仅分别在所有测试之前和之后运行。
要点:仅当您运行测试套件,而不是将Test1和Test2作为单独的JUnit测试运行时,此方法才有效。您提到您正在使用maven,并且maven surefire插件喜欢单独运行测试,而不是套件的一部分。在这种情况下,我建议创建一个每个测试类都可以扩展的超类。然后,超类包含带注释的@BeforeClass和@AfterClass方法。尽管不如上面的方法那么干净,但我认为它将为您服务。
至于失败测试的问题,可以设置maven.test.error.ignore,以便在失败测试中继续构建。不建议您将其作为持续的实践,但是在所有测试通过之前,它应该可以使您正常运行。有关更多详细信息,请参见maven surefire文档。
TA贡献1789条经验 获得超10个赞
使用注释,您可以执行以下操作:
import org.junit.*;
import static org.junit.Assert.*;
import java.util.*;
class SomethingUnitTest {
@BeforeClass
public static void runBeforeClass()
{
}
@AfterClass
public static void runAfterClass()
{
}
@Before
public void setUp()
{
}
@After
public void tearDown()
{
}
@Test
public void testSomethingOrOther()
{
}
}
添加回答
举报