2012-02-18 214 views

回答

2

非常模糊的問題。具體來說,你沒有提到你如何運行你的JUnit測試。你也提到'文件',一個文件可以包含幾個JUnit測試。你想在每個測試之前或者在執行任何測試之前運行外部命令嗎?

但更多的話題:

如果您正在使用JUnit 4或更高版本,那麼你可以標記與@Before註釋的方法和該方法將你的每一個標籤@Test方法之前執行。或者,使用@BeforeClass標記靜態void方法將導致它在類中的任何@Test方法運行之前運行。

public class MyTestClass { 

    @BeforeClass 
    public static void calledBeforeAnyTestIsRun() { 
     // Do something 
    } 

    @Before 
    public void calledBeforeEachTest() { 
     // Do something 
    } 

    @Test 
    public void testAccountCRUD() throws Exception { 
    } 
} 

如果您使用的是JUnit版本早於4,那麼你就可以覆蓋setUp()setUpBeforeClass()方法,以替代@Before@BeforeClass

public class MyTestClass extends TestCase { 

    public static void setUpBeforeClass() { 
     // Do something 
    } 

    public void setUp() { 
     // Do something 
    } 

    public void testAccountCRUD() throws Exception { 
    } 
} 
+0

謝謝。你的帖子基本上回答了我的問題,雖然我希望有些東西不依賴於語言本身(運行配置等)。 – Petr 2012-02-18 22:45:00

+0

@Petr - 沒有問題。 JUnit是一個非常緊湊,定義明確的庫(大多數人喜歡它的東西之一)。如果你想定製某種外部配置,那麼你必須指定更多的細節 - 例如,你是否在IDE中使用Maven,Ant等來啓動測試。 – Perception 2012-02-18 22:48:43

+0

@Petr - nvm我看到你編輯了你的問題。我不相信你可以配置一個外部命令作爲JUnit調用的一部分運行。但我概述的其他方法應該工作得很好。 – Perception 2012-02-18 22:52:35

1

假設你正在使用JUnit 4.0,你可以做到以下幾點:

@Test 
public void shouldDoStuff(){ 
    Process p = Runtime.getRuntime().exec("application agrument"); 
    // Run the rest of the unit test... 
} 

如果你想爲每個單元測試運行的外部命令,那麼你應該這樣做在@Before設置方法。

相關問題