簡體   English   中英

C# 中的單元測試鏈式私有方法

[英]Unit testing chained private methods in C#

我的問題是我的 class 中有公共方法,它正在調用私有方法。 私有方法正在調用另一個私有方法,依此類推,有 4 個鏈式私有方法。 我知道我應該只為公共方法編寫單元測試。 就我而言,我將擁有完整的代碼覆蓋率,因為所有私有方法都是從公共方法調用的。 但萬一出現問題,我的單元測試將不知道究竟是哪種方法搞砸了。 我知道我應該嘗試將我的一些方法移動到單獨的類中,以便我可以測試它們,但這意味着我應該創建 4 個不同的類,每個類中只有一個方法。

那么有沒有辦法測試這些私有方法中的每一個,或者我應該使用 Visual Studio 中的集成功能來測試私有方法?

已經通過調用公共方法來測試私有方法。 您測試公共方法的輸入和 output - 它依賴於私有方法,因此所有方法都在測試中。 發生的任何問題都將導致異常(在檢查堆棧跟蹤時)將通知您哪個方法(私有或其他)導致問題。

私人成員就是這樣,私人的。 它們不應該暴露在外部,因為它們只關心 object 的內部工作,因此單元測試應該(並且只能)測試公共測試,這就是你已經在做的。

您應該專注於測試可觀察的行為,這意味着測試調用公共方法的預期結果。 如果私有方法正在執行大量工作,則考慮將它們移動到注入到正在測試的 object 的對象中,如果沒有,那么如果出現問題,調試應該不會太難:)

斯托門,

我同意你的看法。

我讀過很多論壇都說 PRIVET 方法不應該被測試,因為它在其他公共測試中。 但主要原因是隔離並使構建塊和創建隔離級別的測試變得簡單。 不是為你,而是為其他不同意我意見的人,這里有一個簡單的例子:公共方法 BuildCar (sizeOfChassi, typeOfBody, Color) { Call private MakeChassi (sizeOfChassi) Call private MakeBody (typeOfBody) Call private Paint (Color) }在這種情況下,我不想公開 MakeChassi、MakeBody 和 Paint,因為我只是制造和銷售汽車,但我想徹底測試我的工廠。 如果我只使用 public 方法,我將需要創建很多測試變體,當然我有忘記一些的風險。 只是測試小部件(單元測試的主要原因),我很確定它們正在工作。 另一件事是在 class 內部,我可以創建另一個公共方法來使用這些私有,而無需重新編寫測試變體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM