2012-03-21 171 views
3

我有一個方法名爲DataIn(int InputID, string CSVValue)的類,這是它的主要入口點。從另一種方法調用的測試方法

基於InputID的此方法將CSV值參數存儲到相關的List<string>'s中。當InputID與名爲NoOfRows的屬性相同時,它將創建一個由所有其他組成的List<string>。然後檢查這個最後的List<string>的有效性,如果一切正常,那麼它將結果添加到HashSet<int>作爲檢查重複的快速方式。

我把這個邏輯分解成3個方法讓DataIn調用StoreData,當DataIn中的InputID = NoOfRows時它調用調用ValidateData的MergeData。

我的問題是我應該公開這些方法來單獨測試它們,還是應該保持它們的私密性,並將數據傳遞給DataIn,並在合併後的數據List<string>HashSet<int>上聲明。 DataIn將是從外部調用的方法,使其他方法公開的只用於單元測試。

我擔心的是,如果我做的其他方法公開和測試,他們都OK,我再不敢測試數據輸入工作正常,或者如果我兩者都做我結束了重複試驗。

您的建議是什麼?

回答

1

始終堅持principle of least privilege。將私有方法作爲公開來公開只是爲了使它們成爲單元可測試的,這不是一個好的設計。相反,堅持只測試public interfaces。如果一個方法的行爲有多種不同的輸入方式,那麼確保你爲每個行爲編寫一個測試,並且你應該有一個乾淨整潔的設計,同時還要經過很好的測試。

+0

如果我有類似的邏輯http://stackoverflow.com/questions/29354729/how-to-test-2-methods-with-common-logic 2種public方法做,我不得不測試相同的邏輯兩次。在這種情況下我該怎麼辦? – 2015-03-30 21:55:14

1

關於需要測試私有方法有兩個競爭學校 - 一個說你不應該測試它們,因爲它們是一個實現細節;另一個說你應該測試它們,因爲你需要測試一切。

沒有在雙方的爭論中間饒人,我要指出,雙方都有正確的觀點去爲他們的做法。然而,有一件事你絕對應該避免的,是讓你想成爲私有方法的公開測試他們的唯一目的。如果您決定採用「測試私人方法」方法,則應該使用內部而不是公開這些方法,並讓測試組件在目標程序集中使用InternalsVisibleTo屬性查看內部方法。

相關問題