好的,所以我有一個課程作業問題表,我剛剛完成,我知道它工作正常,但我想爲它編寫一些jUnit測試,就像一些測試練習一樣。它引發了一些問題。我寫了一個叫做count
的函數,它接收一個int n
並彙總來自1 to n
的所有值並返回它。所以,我寫了4個測試案例,這和認爲他們應該在相同的測試方法中都去爲這樣的:類似的jUnit測試用例應該在同一個測試中嗎?
@Test
public void testCount() {
assertEquals(0, SimmonsPS5.count(0)); // 1 obj in table with name => 0 permutations
assertEquals(1, SimmonsPS5.count(1)); // 2 obj in table with name => 1 permutation
assertEquals(3, SimmonsPS5.count(2)); // 2 obj in table with name => 3 permutations (3c2)
assertEquals(5050, SimmonsPS5.count(100)); // 100 obj in table with name => 100c2 permutations (100(100+1)/2)
}
不過,如果一個測試失敗(這可能意味着他們都做)的誤差記者會只能說一個測試失敗了,這是不正確的。
接下來,我在該類的主要方法實例化類,運行幾個函數,然後打印到stdout
。主要方法是首先獲取一個參數(文件名),然後讀取文件並對其執行一些操作。所以我想測試它是否爲每個文件輸出正確的數據 - 這些測試用例中的每一個應該駐留在相同的測試方法中還是單獨的測試方法中?我選擇了單獨的,但只是出於我認爲這些比以前的方法更容易失敗的唯一原因。所以如果這是測試它的正確方法,那麼應該調用什麼測試方法? testMain1
,testMain2
等?什麼是'接受'命名法?
我main
測試用例:
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
@Before
public void setUpStreams() {
System.setOut(new PrintStream(outContent));
System.setErr(new PrintStream(errContent));
}
@After
public void cleanUpStreams() {
System.setOut(null);
System.setErr(null);
}
@Test
public void testMain4in() {
SimmonsPS5.main(new String[]{"4.in"});
assertEquals(47485, Integer.parseInt(outContent.toString().trim()));
}
@Test
public void testMain5in() {
SimmonsPS5.main(new String[]{"5.in"});
assertEquals(1667, Integer.parseInt(outContent.toString().trim()));
}
@Test
public void testMain6in() {
SimmonsPS5.main(new String[]{"6.in"});
assertEquals(45871, Integer.parseInt(outContent.toString().trim()));
}
@Test
public void testMain7in() {
SimmonsPS5.main(new String[]{"7.in"});
assertEquals(324, Integer.parseInt(outContent.toString().trim()));
}
@Test
public void testMain8in() {
SimmonsPS5.main(new String[]{"8.in"});
assertEquals(1057527, Integer.parseInt(outContent.toString().trim()));
}
注意,輸出到stdout
是一個單一的整數倍。
此外,我意識到類似的問題之前已經被問過 - 但沒有一個像我一樣提出過病例 - 所以請在盲目標記爲重複之前徹底閱讀我的問題:)。 –
1測試可以有很多斷言,如果這是問題 – 2014-03-19 05:43:47
@KeirSimmons我想你的想法是,失敗測試的數量是某種程度的代碼質量。我會說,== 0是好的,> 0需要修復 –