2011-02-23 73 views
0

我有一個類用作財務應用程序的一部分。該類綁定到一個UI表單並接受一些值,然後用於計算財務數據。計算出的值作爲對象的屬性顯示。其中幾項計算使用其他計算。幫助單元測試級聯計算

例如,CalculationA可能會返回PropertyA + PropertyB。 CalculationB返回PropertyC - CalculationA。 (這是極端的過度簡化)。

我想寫一些單元測試,以確保這些計算正確執行,並想知道我應該採取什麼方法。

我的第一種方法是手動重新計算測試方法中的預期結果。例如,在測試CalculationB時,我填充測試對象,然後將預期結果設置爲等於PropertyC - PropertyA + PropertyB。但由於真實物體涉及25個屬性,這非常麻煩。

關於選項,我認爲是簡單地創建測試對象,用值填充它,然後編寫一個測試,驗證CalculationA等於PropertyA + PropertyB,另一個驗證CalculationB等於PropertyC - CalculationB的測試。後者假定CalculationB是正確的,但這對於單元測試的目的真的很重要嗎?

您可以爲設置我的測試做些什麼指導/建議,使它們準確,可靠和可維護?例如,確保計算正確並且沒有意外設置CalculationB = PropertyB - CalculationA的最佳方法是什麼?

回答

2

你的情況聽起來相當於一個電子表格,電子表格是表單的代碼只是不常見的語法:

f1(f2(a, f3(b)), c); 

凡F1-3是計算,和A-C的輸入特性。 「鏈接」是這樣的事實,即某些功能的輸出被用作其他輸入。

這種功能計算代碼是單元測試真正發光的地方。測試程序集作爲一個整體意味着對f3規範的改變會以某種複雜而無意義的方式改變f2和f1的測試用例。這可能會導致有人將計算結果剪切並粘貼到測試中作爲預期結果。哪種讓整個練習變得毫無意義。

因此,如果一個測試用例集最小的是一樣的東西:

f1(7, -2) => 23 
f2(1, 2) => 7 
f3(4) => 5 

那麼你可以通過實現每個這樣的測試案例:

  1. 設置的所有屬性,以固定大量
  2. 設置輸入屬性爲這種情況下的輸入
  3. 檢查輸出屬性

因爲第一點是在所有測試之間共享的,所以爲每個計算生成測試用例的努力只與該特定計算的複雜度成正比,而不是與屬性的總數成正比。