首頁 > 後端開發 > C++ > 如何在 C# 中有效地對私有方法進行單元測試?

如何在 C# 中有效地對私有方法進行單元測試?

Patricia Arquette
發布: 2025-01-18 21:42:10
原創
767 人瀏覽過

How Can I Effectively Unit Test Private Methods in C#?

單元測試私有 C# 方法:挑戰與解決方案

在 C# 中直接對私有方法進行單元測試是有問題的,因為它們是封裝的。雖然 Visual Studio 產生存取器類別來幫助解決此問題,但可能會發生執行階段錯誤,​​例如與私人清單互動時物件轉換失敗。 這通常源自於存取器類別和目標類別之間的類型不符。

問題:

常見的情況是單元測試在執行過程中失敗,因為在嘗試將項目新增至私人清單時出現物件轉換錯誤。存取器類別的清單類型與原始類別的清單類型不同。

解決問題:

已棄用的方法:PrivateObject 類別:

在 .NET Core 2.0 之前的 .NET 版本中,PrivateObject 類別提供了一種呼叫私有方法的方法:

<code class="language-csharp">Class target = new Class();
PrivateObject obj = new PrivateObject(target);
var retVal = obj.Invoke("PrivateMethod");
Assert.AreEqual(expectedVal, retVal);</code>
登入後複製

重要提示: PrivateObjectPrivateType 在 .NET Core 2.0 及更高版本中不再受支援。

更好的選擇:

最佳實務通常不鼓勵直接測試私有方法。 以下是原因以及該怎麼做:

  • 透過公共方法進行間接測試:專注於測試公共介面。如果您的公共方法正常運作,那麼支援它們的私有方法也可能是正確的。
  • 避免測試中的狀態變更:單元測試理想情況下不應更改被測對象的內部狀態。 專注於根據特定輸入驗證輸出。
  • 使用模擬物件:模擬提供了一個受控環境來測試私有方法的互動和輸出,而無需直接存取。
  • 避免使用反射:雖然反射允許存取私有成員,但它很複雜,容易出錯,通常不建議用於單元測試。 它使測試變得脆弱且難以維護。

以上是如何在 C# 中有效地對私有方法進行單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板