設定 InternalsVisibleTo 屬性
更新:2007 年 11 月
您的程式碼可能包含其中有 internal 存取限定詞 (在 Visual C# 中) 或是 Friend 存取限定詞 (在 Visual Basic 中) 的類別、介面或結構。型別具有這個限定詞的原因可能是下列其中一項:
您已明確將型別標記為內部型別。
根據預設,系統會將沒有明確存取限定詞的最上層類別、介面或結構視為內部型別。
根據預設,程式碼中待測試的私用 (Private)、內部和 friend 項目對測試程式碼而言都是不可見的項目,但是您還是可以測試它們。如需如何測試私用方法的詳細資訊,請參閱 HOW TO:測試私用方法。
測試具有內部存取限定詞的項目
當您為包含內部型別的程式碼產生單元測試方法時,可能會看到 [加入 InternalsVisibleTo 屬性] 對話方塊。這個對話方塊包含下列是非題:
您已經選擇要為標記成 Friend 或 Internal 的型別產生測試。是否要將 InternalsVisibleTo 屬性加入專案 <project name>?
如果來源專案已啟用強式名稱簽署,也必須為測試專案啟用簽署。如果不啟用的話,則會收到編譯錯誤訊息。
在這個訊息中,<project name> 是參考其中包含受測試程式碼的專案。如果您回答「是」,待測試程式碼的組件便會以 InternalsVisibleTo 屬性 (Attribute) 做標記,使測試專案可以看到該組件中的內部型別。如此您就可以在這些內部型別上執行單元測試。
注意事項: |
---|
InternalsVisibleTo 屬性可以接受兩種形式。簡單的形式指定要授與存取權的組件;而較複雜的形式還包含了強式名稱 (Strong Name) 簽署的公開金鑰 (Public Key)。如需詳細資訊,請參閱下一節。 |
如果您回答「否」,便會將待測試程式碼中的內部型別視為具有 private 存取修飾詞 (Modifier)。在上述情形中,測試產生程序會建立私用存取子,讓測試組件可以同時存取這些內部與私用型別。您將會在測試專案的 [測試參考] 資料夾中看到這個私用存取子組件。
InternalsVisibleTo 或私用存取子:應該使用哪一個?
您可以使用私用存取子組件同時存取私用成員與内部成員。如果受測試程式碼有內部成員但是沒有私用成員,最好在受測試程式碼中使用 InternalVisibleTo 屬性,並且放棄建立私用存取子組件。但是如果程式碼同時擁有您想要測試的私用與內部成員,請使用能同時存取兩者的私用存取子。如需詳細資訊,請參閱使用私用存取子。
強式名稱簽署需求
[加入 InternalsVisibleTo 屬性] 對話方塊的第二段包含強式名稱簽署的相關資訊。它的意思是除非您正確啟用強式名稱簽署,否則建置方案時將會產生編譯器 (Compiler) 錯誤:
如果待測試程式碼組件已啟用強式名稱簽署,您也必須為測試組件啟用此種簽署。此時,您必須使用 InternalsVisibleTo 屬性的簽署形式。例如:
[InternalsVisibleTo(“OtherAssembly, PublicKey=12435234fsdaf;l457fwi248ew843872r892r”)]
如果待測試程式碼組件未啟用強式名稱簽署,則不需要為測試組件啟用此種簽署。此時,您可以使用 InternalsVisibleTo 屬性的未簽署形式。
[InternalsVisibleTo(“OtherAssembly”)]
注意事項: 如果您在 [加入 InternalsVisibleTo 屬性] 對話方塊中按一下 [是],Visual Studio 會加入 InternalsVisibleTo 屬性的簡單形式,也就是沒有公開金鑰的形式。
檢測待測試程式碼組件以啟用程式碼涵蓋範圍的蒐集時,也會對強式名稱簽署產生影響。如需詳細資訊,請參閱檢測及重新簽署組件。