[英]Questions on unit testing of private methods
在MSTest中, [Shadowing]
屬性可幫助您從另一個程序集中對單個方法進行單元測試。 以下是相關鏈接: VS在生成單元測試時使用的Shadowing屬性是什么?
我的問題是:
internal
只是為了使其可用於某些其他測試項目/程序集中的單元測試,這是一種很好的(?)實踐嗎? (使用InternalsVisibleTo
) 更新(如何定義要測試的內容):理想情況下(在測試優先方法中)測試是您班級的第一個用戶。 當您編寫測試時,您會嘗試想象用戶將如何使用您的課程。 用戶不會與私人方法交互(反思是作弊)。 因此,作為您班級的第一個用戶,您的測試不應與私有方法交互。
簡要回答一下你的問題:
一般來說,他們不應該。 大多數情況下,您的私有位將在測試類合同/公共API時進行測試。 對於時間這是不可能的,測試私有方法就像其他任何東西一樣是單元測試。
這很常見。 雖然改變可見性可能被認為是壞主意,但當它僅僅改變為內部時,它並沒有那么糟糕。 然而,在像TDD這樣的方法中,測試的需要通常會以這樣的方式驅動你的設計,以至於不需要這樣的“黑客”。 但就像我說的那樣,這是相當普遍的 - 你不應該過多擔心它,除非它達到荒謬的程度(比如暴露的整個私人部分)。
它是單元測試,只要它測試你的類的單個單元 (或一個邏輯概念 )。 私有方法通常是作為公共部分重構的結果而創建的,大部分時間都是單個單元測試的目標。 如果您覺得您的私有方法不再是一個單元 ,那么它可能是一個重構調用。
我希望通過公共可用的電話來運用所有私人方法。 必須有一條路徑來執行公共呼叫中的每條專線,如果不存在,您可以刪除該代碼。
使用內部而不是私有可能會以一個大混亂結束,我不會使用這種方法。
作為Java開發人員,我這樣做。 我也沒有改變訪問級別。 我使用反射來訪問私有方法。 我不必將它授予我的用戶,而且我不必向他們展示我的單元測試。
這是Java的一個骯臟秘密:您始終可以通過反射來規避訪問限制。 我不知道C#和.NET是否也是如此,但你可以查看它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.