2013-08-19 9 views
4

아래에 설명 된대로 mscorlib 가짜 DLL을 별도의 프로젝트에서 참조하는 데 문제가 있습니다.Fake가 Fake 프로젝트에서 Fake dll을 제대로 참조하지 않는 이유는 무엇입니까?

나는 MS Fakes를 사용하여 단위 테스트를 작성하는 수많은 VS12 솔루션을 보유하고 있습니다. 다음 URL의 제안에 따라 필자는 위조 된 DLL에 대한 프로젝트를 만들기로 결정했습니다. Code generation, compilation, and naming conventions in Microsoft Fakes. 아이디어는 가짜 DLL의 위치가 현지화 될 것이므로 테스트 프로젝트 전반에 걸쳐 수많은 가짜 DLL이 필요하지는 않습니다. (나는이에게 일반적인 가짜 라이브러리를 호출 할 수 있습니다.) 현재의 내 단위 테스트에서

를, 내가 PresentationCore, System.ManagementSystem에서 심을 사용하고 있습니다. 그러나 사용하고있는 시스템 shim은 실제로 mscorlib.dll에 있으며, 특히 Convert (정적 클래스) 및 DriveInfo (밀폐 된 클래스)에 있습니다. 난 단지 mscorlib에에서 제작 한 (지금은)이 두 클래스를 필요로하기 때문에 다음과 같은 .fakes는 mscorlib에 대한 파일 :

PresentationCore 및 SystemManagement를 들어
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/"> 
    <Assembly Name="mscorlib" Version="4.0.0.0"/> 
    <StubGeneration> 
    <Clear/>  
    </StubGeneration> 
    <ShimGeneration> 
    <Clear/> 
    <Add FullName="Convert"/> 
    <Add FullName="DriveInfo"/> 
    </ShimGeneration> 
</Fakes> 

, 나는 비슷한 .fakes이에 의해 분명하고 추가 클래스 파일 이름.

그러나 내 테스트 프로젝트에서 mscorlib.4.0.0.0.Fakes DLL에 대한 참조를 공통 가짜 라이브러리에서 추가하면 Convert 및 DriveInfo shim을 사용하는 테스트가 실행되지 않습니다. 대신 테스트 메서드는 Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException을 throw하여 지원되지 않는 shimmed 클래스의 이름을 지정합니다. 공통 가짜 라이브러리를 참조 할 때 PresentationCore 및 System.Management의 기능을 사용하는 테스트가 여전히 작동합니다. 내 테스트 프로젝트에 직접적으로 (그리고 mscorlib에 간접적으로) 시스템에 대한 페이크 어셈블리를 추가하는 경우

하지만, 내 테스트 프로젝트에서 동일한 mscorlib.fakes 파일을 생성하고 지역 mscorlib.4.0에 대한 참조를 추가합니다. 0.0.Fakes Dll, 공통 가짜 라이브러리에 링크되었을 때 예외를 던진 테스트는 결함없이 실행됩니다.

일반 가짜 라이브러리에서 mscorlib 가짜 DLL을 개체 브라우저를 사용하여 살펴본 후 로컬로 빌드 된 DLL과 비교해 보았습니다. 작동하지 않는 일반적인 가짜 라이브러리에 mscorlib에 가짜를 참조하는 이유

는 사람이 어떤 생각을 가지고 있습니까?

답변

0

가짜의 문제는 모든 빌드에서 dll을 재생성한다는 것입니다. 이것은 시스템 DLL에 덜 중요하지만 기억할만한 가치가 있습니다. 당신은 아마 그들 사이의 연결이 심 (shim)을 위해 어떻게 움직이는 지 확신 할 수 없기 때문에 프로젝트 내에서 그들을 지켜야 할 것입니다.

shim이 어떻게 구현되는지는 모르지만 런타임시 메서드를 명확하게 덮어 씁니다. 개발자가 좀 더 자세하게 대답 해 줄 필요가 있다고 생각하지만 mscorlib에서는 Fakes (디자인)에 대한 지원이 다소 부족한 편입니다.

는 궁극적으로하지만, 당신의 목표는 동기를 잃고 당신의 가짜 위험을 감수하면서, 테스트 프로젝트에서 몇 번의 클릭을 저장하는 것 같다. 그 일이 일어날 확률은 중요하지 않습니다. 아마 테스트를 덜 명확하게 할만한 가치가 없을 것입니다.

테스트의 목표는 유지 보수 비용을 줄이는 것이므로 일반 코드보다 숨겨진 것이 덜 중요합니다. 유지 보수 프로세스에 단계가 추가됩니다. Fakes는 'Oh'의 추가 긴장없이 대부분의 사람들에게 충분한 비밀입니다.하지만 간접적으로 참조되고 있습니다 ... 작동합니까? '