web-dev-qa-db-ja.com

Moqに見える内部インターフェイスを作成する方法は?

C#ソリューションには3つのプロジェクトがあります。

  • 署名
  • 構造
  • テスト

署名には、パブリックおよび内部インターフェイスがあります。また、それは持っています

  [Assembly: InternalsVisibleTo("Structures")]
  [Assembly: InternalsVisibleTo("Tests")]

assemblyInfo.csの。

Structuresにはパブリッククラスと内部クラスがあり、

  [Assembly: InternalsVisibleTo("Tests")]

assemblyInfo.csの。

テストには次のソースがあります:

<packages>
  <package id="Moq" version="4.2.1409.1722" targetFramework="net45" />
  <package id="NUnit" version="2.6.4" targetFramework="net45" />
  <package id="NUnitTestAdapter" version="1.2" targetFramework="net45" />
</packages>

packages.configのNuGetパッケージとして。

Signaturesの内部インターフェイスとStructuresの内部クラスの単体テストを作成しました。実行し、次の結果がありました:例外:

Type Signatures.InterfaceXはDynamicProxyに表示されません。アクセスできない型のプロキシを作成することはできません。型をpublicまたはinternalにして、アセンブリを[Assembly:InternalsVisibleTo(InternalsVisible.ToDynamicProxyGenAssembly2)]属性でマークします。

論理的なようです。 [Assembly:InternalsVisibleTo( "InternalsVisible.DynamicProxyGenAssembly2")]を署名および構造プロジェクトのアセンブリ情報に追加しました。実行し、次の結果がありました:例外:

アセンブリ 'DynamicProxyGenAssembly2、Version = 0.0.0.0、Culture = neutral、PublicKeyToken = null'のタイプ 'Castle.Proxies.IReminiscenceableDataTableProxy'はアクセスできないインターフェイスを実装しようとしています。

これは助けるためでしたが、しませんでした。例外メッセージのみを変更します。

私の問題を修正するには?

37

推奨される修正メッセージでは、アセンブリ名にconst/staticフィールドを使用しています。

[Assembly: InternalsVisibleTo(InternalsVisible.ToDynamicProxyGenAssembly2)]

アセンブリ名に対応しない文字列を使用しました:

[Assembly: InternalsVisibleTo("InternalsVisible.DynamicProxyGenAssembly2")] 

次のように変更します。

[Assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] 

エラーメッセージで実際のアセンブリ名(InternalsVisibleToに表示されるはずです)を確認できます。

アセンブリから「Castle.Proxies.IReminiscenceableDataTableProxy」と入力します 'DynamicProxyGenAssembly2(...)

70
k.m