讓我們假裝我有3個類,每個類都有一個負責任的(和方法)。我們還假裝這些類有接口來促進依賴注入。類A調用類B的接口,類B調用類C的接口。如果類C拋出NotAPrimeNumberException(如果說,int參數不是質數),我希望有一個單元測試可以確保如果傳入的參數不是素數,C會拋出一個NotAPrimeNumberException異常。到現在爲止還挺好。單元測試多個例外 - 何處停止?
我目前認爲,單元測試提供了所有需要理解被測方法行爲的文檔。所以前面提到的單元測試就像MakeSureNotAPrimeNumberExceptionIsThrownIfNumberisNotPrimeTest()。
B類知道類C可以拋出一個NotAPrimeNumberException。如果我想讓NotAPrimeNumberException冒出B類,我應該爲B類編寫一個單元測試,以某種方式檢查在某些情況下是否引發NotAPrimeNumberException? A類呢?如果A也讓NotAPrimeNumberException冒出來,它是否也有一個單元測試呢?
我擔心的是,如果我不在B類中編寫單元測試,那麼類B的消費者不會意識到類B可以拋出這種類型的異常。但是,如果我要寫單元測試,那麼我必須強迫對類B的調用拋出一個NotAPrimeNumberException,而不是處理類B中的異常,這有點愚蠢。如果我不寫一個單元測試,是否有適當的方式(如果有)在API中記錄此異常可能發生?
獎勵的問題是你如何在NUnit中使用Rhino-mocks來實現這個功能?這當然取決於前兩個問題。
當預期的行爲發生時,測試應該通過。即使這種行爲正在拋出異常。 – 2011-01-19 17:19:38