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")]
변경을하는 방법에 대해
이것은 중요한 구별입니다. throw 된 오류 메시지는 두 번째 옵션이 필요하다고 생각하게하지만 세 번째 옵션은 실제로이를 수정합니다. – SouthShoreAK
캐슬 프로젝트가 메시지에서 나온 것과 같은 '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)]'는 접근 할 수 없다. 그래서 당신은 당신 자신의 마술 끈이어야합니다. –
이것이 나를 위해 작동하지 않는다고 강한 이름이 서명 한 어셈블리는 말하지만 공용 키 –