設定 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 屬性的簡單形式,也就是沒有公開金鑰的形式。

檢測待測試程式碼組件以啟用程式碼涵蓋範圍的蒐集時,也會對強式名稱簽署產生影響。如需詳細資訊,請參閱檢測及重新簽署組件

請參閱

工作

HOW TO:測試私用方法

概念

使用私用存取子