2015-01-30 2 views
26

C# 솔루션에 3 개의 프로젝트가 있습니다.Moq에서 내부 인터페이스를 표시하는 방법은 무엇입니까?

  • 서명
  • 구조물
  • 테스트

서명은 공개 및 내부 인터페이스를 갖는다. 또한이 파일은 AssemblyInfo.cs 파일의

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

입니다.

구조 공공 내부의 클래스와의 AssemblyInfo.cs에

[assembly: InternalsVisibleTo("Tests")] 

있다. packages.config에서 NuGet 패키지로

<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> 

:

시험은 다음 소스를 가지고있다.

구조체의 Signatures 및 내부 클래스에서 내부 인터페이스에 대한 단위 테스트를 작성했습니다. 실행하고 다음 결과가 발생했습니다. 예외 :

Signatures.InterfaceX는 DynamicProxy에 표시되지 않습니다. 액세스 할 수없는 유형의 프록시는 만들 수 없습니다. 형식을 public 또는 internal로 만들고 어셈블리를 [assembly : InternalsVisibleTo (InternalsVisible.ToDynamicProxyGenAssembly2)] 특성으로 표시하십시오.

논리적으로 보입니다. Signature and Structures 프로젝트의 어셈블리 정보에 [assembly : InternalsVisibleTo ("InternalsVisible.DynamicProxyGenAssembly2")]을 추가했습니다. 실행 한 다음 결과를 가지고 : 예외 :

유형 어셈블리에서 'Castle.Proxies.IReminiscenceableDataTableProxy' 'DynamicProxyGenAssembly2, 버전 = 0.0.0.0, PublicKeyToken = null의 문화 = 중립'액세스 할 수없는 인터페이스를 구현하려고합니다.

이것은 도움이되었지만하지 않았습니다. 예외 메시지 만 변경하십시오.

내 문제를 해결하는 방법?

[assembly: InternalsVisibleTo(InternalsVisible.ToDynamicProxyGenAssembly2)] 

당신은 어셈블리 이름과 일치하지 않는 문자열 사용 :

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

변경을하는 방법에 대해

답변

51

제안 된 수정 메시지는 어셈블리 이름에 대한 CONST/정적 필드를 사용합니다 :

실제 어셈블리 이름 (InternalsVisibleTo)를 입력하십시오.

유형 'Castle.Proxies.어셈블리에서 IReminiscenceableDataTableProxy 'DynamicProxyGenAssembly2 (...)

+0

이것은 중요한 구별입니다. throw 된 오류 메시지는 두 번째 옵션이 필요하다고 생각하게하지만 세 번째 옵션은 실제로이를 수정합니다. – SouthShoreAK

+4

캐슬 프로젝트가 메시지에서 나온 것과 같은 'const'멤버를 노출하는 것으로 보입니다. [Castle.Core/Core/Internal/InternalsVisible.cs'] (https://github.com/castleproject/Core/blob/) master/src/Castle.Core/Core/Internal/InternalsVisible.cs), Castle 프로젝트가 Moq.dll에 내장 된 방식 때문에 Moq를 통해 볼 때이 클래스는 비공개가됩니다. '[assembly : InternalsVisibleTo (Castle.Core.Internal.InternalsVisible.ToDynamicProxyGenAssembly2)]'는 접근 할 수 없다. 그래서 당신은 당신 자신의 마술 끈이어야합니다. –

+0

이것이 나를 위해 작동하지 않는다고 강한 이름이 서명 한 어셈블리는 말하지만 공용 키 –

관련 문제