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()
{
}
}
添加回答
舉報