這是常見的有與字符串參數的方法,必須驗證agains爲零或爲空,如本實施例中的類:我應該如何在方法中測試空和/或空字符串參數?
public class MyClass {
public void MyMethod(string param){
if(string.IsNullOrEmpty(param)){
throw new ArgumentNullException(...);
}
//...
}
}
很明顯,該方法的行爲是兩個相同的(無效)值。這是一個非常普遍的情況,當談到測試這些方法時,我總是懷疑如何去做。我總是創建兩個單獨測試了這些情況:
[TestClass]
public class Tests {
[TestMethod]
public void MyMethod_should_fail_if_param_is_null(){
//...
myclass.MyMethod(null);
//...
}
[TestMethod]
public void MyMethod_should_fail_if_param_is_empty(){
//...
myclass.MyMethod("");
//...
}
}
但我看到了太多的冗餘。這些測試完全相同,唯一的區別是傳遞給方法的參數。這讓我非常困擾,因爲我必須爲每個字符串參數創建兩個測試。具有3個參數的方法將僅具有6個測試來測試參數。
我認爲這是測試這些參數的正確方法,但是如果我知道99%的字符串參數將以同樣的方式進行驗證,那麼測試它們爲空(或空)並假設它們會更好在另一種情況下的行爲將是相同的?
我想知道你對此有何看法。我知道我問的是技術問題而不是技術問題,但我認爲測試社區可能對這種情況有一些有趣的看法。
謝謝!
謝謝你的快速反應! 我已經創建了我自己的ExpectException版本(你可以在這裏查看http://gerardocontijoch.wordpress.com/2008/12/02/uso-de-expectedexceptionattribute-para-testear-excepciones/),並使用它在這些情況下。不能沒有它:P 我喜歡你提出的解決方案,我想過,但正如你所說,「這不符合單元測試的正常教條」,我只想跟隨它,你知道,習慣良好的做法。畢竟,我可能會選擇這個解決方案。讓我們來看看還有什麼其他的想法... – 2009-05-30 21:49:17
事情是,我不相信遵循教條,把實用主義推出窗外*是一個很好的習慣:)這是值得的*知道*的教條,但隨後有意識地忽略它對於特定的情況,我們已經權衡了利弊,並發現它不起作用。 – 2009-05-30 22:15:01