2011-11-30 224 views
1

我有一個名爲Menu.java的類,它用作我的程序的接口。用jUnit測試

在這個Menu.java類中,我有一個switch/case塊,它充當我的菜單Options。

基本上,我想用jUnit來測試每個case在switch/case塊中的輸出,但是我正在努力尋找最好的方法來做到這一點。

爲每個菜單操作最好有一個單獨的jUnit TestCase?然後使用單個TestUnit來運行所有情況?還是有更好的辦法可以做到這一點?

非常感謝。

回答

3

一般來說,每個類都有一個相應的測試類。所以你會有一個MenuTest.java來匹配你的Menu.java。這允許您快速查找與特定文件關聯的測試,因爲命名約定。

然後,理想情況下,每個測試將有一個測試方法與之相關聯。因此,如果您的交換機有10個案例,則最終將有10個測試方法,每個案例一個。這使您可以快速找出發生故障的選項,因爲您可以分別獲得每個測試的反饋。

請注意,TestCase是JUnit 3.如果可能,請使用JUnit 4測試(org.junit。*),這些註釋將使用@Test註釋進行註釋。

1

我會爲每個可能的工作流程使用單個測試用例。理想情況下,每個測試用例都會有一個斷言,根據這個指南可能會更容易。一般來說,你想保持你的單元測試小而簡潔。

然後我會把所有的測試用例放在同一個測試類中,只要它們屬於同一個測試類。

1

我會爲Menu.java(MenuTest.java)創建一個類。我會爲每個菜單選項編寫一個測試用例。如果你有GUI的東西,將其與邏輯分開。

無需測試GUI或其管道。

-2

在你的情況下,我會爲所有選項使用單個測試用例。你需要的東西是這樣的:

import org.junit.Test; 
import org.junit.Assert; 
import your.project.Menu; 

public class MenuTest { 
@Test 
public void testCase() { 
Menu menu = new Menu(); 
assertEquals("1",menu.runCase("bar")); 
assertEquals("2",menu.runCase("foo")); 
//etc 
} 
} 
+2

這是將所有斷言包含在一個測試用例中的做法非常糟糕。如果第一個失敗,你不知道其餘的會通過還是失敗。它也使得你的測試用例無法獨立,因爲它們都處於一種測試方法中。查看所有其他答案。 – Kane

+0

@凱恩我不同意你的看法。目標是測試具體的方法。所以測試用例正在測試它,它不需要多少斷言。此外,我看到醜陋的每一個不必要的樣板方法都有自己的調用不同的參數和預期結果的相同功能。 – dhblah

+2

每種方法可以有多個測試用例。事實上,這是一個很好的做法,因爲給定的方法可能有很多可能的路徑,並且單獨的測試用例要好得多。將所有斷言填充到一個方法中會留下前面提到的問題:如果失敗,您不知道事後發生的斷言的狀態。 – Kane

0

如果您正在測試此交換機接收不同參數的方法,可以考慮使用一個參數化測試用例。其優點是,它更容易跟蹤的需要,如果你的開關改變而改變什麼:

這裏是如何與TestNG工作(查找「參數化測試案例」的JUnit)

// This method will provide data to any test method that declares that 
// its Data Provider is named "test1" 
@DataProvider(name = "test1") 
public Object[][] createData1() { 
return new Object[][] { 
    { "Foo", new Integer(36) }, 
    { "Bar", new Integer(37)}, 
}; 
} 

// This test method declares that its data should be supplied by the 
// Data Provider named "test1" 
@Test(dataProvider = "test1") 
public void verifyData1(String n1, Integer n2) { 
System.out.println(n1 + " " + n2); 
}