我是新的單元測試,我試圖弄清楚是否應該開始使用更多的「內部」訪問修飾符。我知道,如果我們使用'internal'並設置程序集變量'InternalsVisibleTo',我們可以測試我們不想從測試項目中公開聲明的函數。這使我認爲我應該總是使用'內部',因爲至少每個項目(應該?)都有自己的測試項目。你們可以告訴我爲什麼我不應該這樣做嗎?我應該何時使用'私人'?C#「內部」訪問修飾符做單元測試時
回答
內部類需要進行測試,並且有一個assemby屬性:
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleTo("MyTests")]
這個添加到項目信息的文件,例如Properties\AssemblyInfo.cs
。
您也可以使用私有方法,您可以使用反射調用私有方法。如果您使用的是Visual Studio Team Suite,它具有一些很好的功能,可以生成代理來爲您調用私有方法。下面是演示如何做自己的單元測試private和protected方法的工作代碼項目的文章:
http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx
在其中的訪問修飾符,你應該使用方面,我的一般經驗法則是開始與私人並根據需要升級。這樣一來,您將盡可能少地暴露出真正需要的類的內部細節,並有助於將實現細節隱藏起來,因爲它們應該是。
如果要測試私有方法,請在Microsoft.VisualStudio.TestTools.UnitTesting
命名空間中查看PrivateObject
和PrivateType
。他們圍繞必要的反射代碼提供易於使用的包裝。
當投下時請留下評論。謝謝。 – 2012-07-30 16:44:02
這是愚蠢的投票下來這個答案。它指向一種新的解決方案,並且是以前沒有提到過的一個很好的解決方案 – 2012-09-06 07:43:13
繼續使用默認私人。如果一個成員不應該暴露在這種類型之外,那麼它就不應該暴露在這種類型之外,即使是在同一個項目中。這使得事情變得更加安全和整潔 - 當你使用這個對象的時候,更清楚你可以使用哪些方法。
話雖如此,我認爲有時候爲了測試目的而自然而私有的方法是合理的。我更喜歡使用反射,這是重構不友好的。
有一點要考慮可能是一個「ForTest」後綴:
internal void DoThisForTest(string name)
{
DoThis(name);
}
private void DoThis(string name)
{
// Real implementation
}
然後,當你使用同一個項目中的類,這是明顯的(現在和將來),你不應該真的在使用這種方法 - 它僅用於測試目的。這有點冒險,而不是我自己做的事情,但至少值得考慮。
如果該方法是內部的,這是否不妨礙其在測試組件中的使用? – 2010-02-22 15:47:42
- 1. 內部訪問修飾符
- 2. C#內部訪問修飾符
- 3. Doxygen與C#內部訪問修飾符
- 4. 訪問修飾符C# - 內部修飾符
- 5. OO中的單元測試和訪問修飾符
- 6. c#訪問修飾符部分像C++
- 7. 訪問修飾符的內部類
- 8. 關於C#中的內部訪問修飾符
- 9. C++子類訪問修飾符?
- 10. C#訪問修飾符與傳承
- 11. c#winform控件訪問修飾符
- 12. C++繼承與訪問修飾符
- 13. System.Reflection.BindingFlags.Instance對應於C#訪問修飾符
- 14. 訪問修飾符「protected private」在visual C++中做什麼?
- 15. Delphi訪問修飾符
- 16. 庫級訪問修飾符
- 17. EventInfo訪問修飾符
- 18. 動態訪問修飾符
- 19. 練習訪問修飾符
- 20. 類訪問修飾符
- 21. 保護訪問修飾符
- 22. 通過訪問修飾符
- 23. 包訪問(protected修飾符)
- 24. 測試所有級別的訪問修飾符控制
- 25. 沒有修飾語法跳過單元測試的測試
- 26. Python單元測試:unterstand修飾器問題
- 27. 單元測試數據訪問層c#
- 28. .Net程序集和內部訪問修飾符的使用
- 29. 內部類訪問修飾符不起作用?
- 30. 如何ReSharper的(R#)更改默認訪問修飾符內部
值得一提 - 你可以通過在方法本身內使用System.Diagnostics.Debug.Assert()來經常避免單元測試你的內部方法。 – 2017-03-30 02:32:34