在我的.NET解決方案中,我有兩個項目:一個主項目和一個項目,用於對主項目運行測試。在我的項目中,我有幾種我想保持「私人」的方法,但也想運行測試。有沒有一種訪問方法可以將這些功能限制在我的解決方案中?是否有訪問修飾符限制解決方案?
回答
您在尋找InternalsVisibleTo屬性。
通過該屬性,您可以指定其他應該可以訪問組件內部類型和方法的程序集。因此,在您的主項目AssemblyInfo.cs文件(或任何其他源文件),你可以指定你的測試項目是「朋友組裝」,應該有機會獲得您的主項目的內部:
正如Alexei指出的那樣,如果您的MainProject使用強名稱鍵進行簽名,則任何「朋友」程序集也必須進行簽名。這是解釋here
雖然,如另一評論中所述。最佳做法是使用其公共API測試您的程序集。
備註:由於強大的簽署要求,「InternalsVisibleTo」方法對許多人無效。 –
您可以使用InternalsVisibleTo
屬性使類型和方法對所選程序集可見。
但是,您應該嘗試設計您的API,以便僅使用公共接口進行測試。
您應該認真回想一下您的解決方案的體系結構。這是一種常常表明你的班級同時做了太多事情的氣味。
一個簡單的解決方法是提取這種責任(這些私有方法)到另一個類,他們隨即成爲public
和是可測試的開箱...
沒有,有沒有辦法來限制訪問「只是解決方案「。
原因是解決方案只是一組項目。一個項目可以有多種解決方案。因此,即使您「限制」了訪問一個解決方案中包含的項目,您/他人也可以創建另一個解決方案,以某種方式神奇地訪問方法。
另外構建的程序集不包含關於它是哪個解決方案的任何信息 - 所以在運行時沒有信息來檢查訪問。
對你特別的問題 - InternalsVisibleTo
(如圖other answers)就可以訪問內部方法,你讓項目(需要強簽名的程序集)或重構你的代碼,以避免用於測試私有方法的需要。
- 1. 更改訪問修飾符的解決方法
- 2. 沒有訪問修飾符的方法
- 3. 爲什麼Java限制隱藏方法的訪問修飾符
- 4. 訪問修飾符對於Main方法是否重要?
- 5. 是否有任何等同於訪問修飾符的限制只能使用C#訪問一個線程?
- 6. 瞭解默認訪問修飾符
- 7. C#訪問修飾符:限制一些方法只有一個其他類
- 8. 窗體解決方案空間有限 - MS訪問
- 9. Kotlin中是否有關於訪問修飾符的文檔?
- 10. Ruby實例變量是否具有訪問修飾符?
- 11. OpenAM + Winstone是否有解決方案?
- 12. 檢查方法的訪問修飾符
- 13. 動態方法訪問修飾符
- 14. 我的緩存解決方案解決方案是否安全?
- 15. 如何限制引用庫中的公共訪問修飾符?
- 16. Delphi訪問修飾符
- 17. 內部訪問修飾符
- 18. 庫級訪問修飾符
- 19. EventInfo訪問修飾符
- 20. 動態訪問修飾符
- 21. 練習訪問修飾符
- 22. 類訪問修飾符
- 23. 保護訪問修飾符
- 24. 通過訪問修飾符
- 25. 包訪問(protected修飾符)
- 26. 什麼是訪問修飾符
- 27. 訪問修飾符 - 目的是什麼?
- 28. 如果未指定訪問修飾符,是否有失敗編譯的方法?
- 29. 是否可以顯示所有方法及其訪問修飾符?
- 30. Tweepy api限制解決方案
有人可能會爭辯說,你應該只測試你的公共API,但你可以使用internal和InternalsVisibleTo來讓測試項目看到它們。 – juharr