在很多單元測驗框架中,測驗用例都是獨立的。例如,GoogleTest 說:
測驗應該是獨立的和可重復的。除錯由于其他測驗而成功或失敗的測驗是一件痛苦的事情。googletest 通過在不同的物件上運行每個測驗來隔離測驗。
我不明白為什么測驗用例是獨立的。例如,假設一個復合物件A使用物件B和C。很明顯,如果B和C是錯誤的,那么 doA也將是不正確的,無論它是否正確實施。所以我以某種方式喜歡看到這樣的輸出:
Testing B [SUCCEED]
Testing C [FAILED]
Testing A [FAILED] because dependent test C failed.
這些框架是否假設與其A相互依賴B,不如通過模擬和進行測驗C?因為有時為您的類撰寫正確的模擬程式可能很復雜(并且本身有問題),所以我仍然認為依賴測驗更好。
uj5u.com熱心網友回復:
您正在考慮錯誤型別的(獨立)依賴。這里的依賴意味著 testA2 依賴于某種形式的初始化或在 testA1 中完成的設定(這可能依賴于由 testB2 等完成的初始化)。這會使您的測驗變得非常脆弱,因為亂序執行或失敗的測驗將級聯您的整個測驗用例集。這也使得無法單獨運行測驗用例。
例如,testA1 可以在測驗資料庫中創建記錄,而 testA2 期望這些記錄存在于測驗資料庫中。如果 testA1 失敗(或尚未運行),則 testA2 也會失敗。
相反,如果您有獨立的測驗用例(例如,創建記錄作為 testA2 設定的一部分),那么測驗運行失敗(或正確運行)或測驗執行無序,將不會阻止您的其他測驗成功完成。
當然,如果您的被測類(例如 A)和另一個類(例如 C)之間的依賴關系從根本上被破壞,那么您可能有多個測驗用例失敗,但這與文本中的含義不同你參考。
使用獨立的測驗用例,如果您不模擬/存根測驗中的(直接)類的依賴項(例如 C)(例如 A ))。
需要明確的是,并不是每個人都喜歡這種型別的依賴,有些人還會通過模擬、存根等方式努力使他們的單元測驗獨立于這種型別的問題。不過,這是一種更固執的做法,因為它增加了復雜性,可能使您的測驗更加脆弱,并且更容易遺漏這些類之間的互動問題。
但是,正如我之前所說,這是一種與測驗用例獨立性通常意味著(特別是在您參考的文本中)不同的獨立性型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/386087.html
上一篇:如果用戶不使用域,而僅通過公共IP,如何阻止對站點的訪問?
下一篇:Angular如何測驗服務方法?
