2013-01-15 76 views
1

我是新入JUnit4,我習慣Google Test for C++。我用assertEquals()寫了一段代碼,並進行了許多檢查。我認爲它會輸出一些日誌信息告訴用戶檢查是否成功,爲什麼,並繼續下一個assertEquals()。但它正在停止執行。替代斷言獲取失敗日誌消息並繼續?

我已經搜索了關於這個主題,它看起來像JUnit的設計不同於谷歌測試,所以我應該爲每個斷言使用@Test方法。但是有沒有別的辦法可以得到我想要的?我讀了有關驗證方法而不是斷言,但它與Selenium有關,我甚至不知道它是什麼。

回答

4

可以使用ErrorCollector規則做多斷言拋出。

@Rule 
public ErrorCollector collector = new ErrorCollector(); 

@Test 
public void testMethod() 
{ 
    collector.checkThat(variable, equalTo(otherVaiable)); 
    collector.checkThat(variable2, equalTo(otherVaiable2)); 
} 

checkThat方法使用hamcrest匹配器來進行斷言。

+0

看起來像我正在尋找的解決方案。但是仍然有一個問題:它不認可這個方法equalTo。我搜索了JUnit API,發現checkThat第二個參數必須是Matcher 對象,但我一直無法找到關於哪些Matchers可用的信息 –

+1

@RomanRdgz equalsTo是org.hamcrest.CoreMatchers中的靜態方法 –

2

你的研究是非常正確的。純粹主義者認爲每個測試用例都應該有一個確切的說法。我不遵循這個規則,但是一旦第一次斷言失敗就中斷測試是個好主意。

請看下面的例子:

assertEquals(1, listOfNames.size()); 
assertEquals(10, listOfNames.get(0).length()); 

運行第二個斷言,如果第一個失敗沒有太大的意義。級聯故障不會幫助您找到根本原因。

- 事實上,特殊的例外是當斷言失敗