2012-05-15 3 views
0

두 가지 RhinoMocks와 Moles가 사용되는 테스트 메소드를 개발 중입니다. 필요에 따라 테스트 메소드에 대한 Mole으로 호스트 유형을 선언했습니다. 이제 RhinoMocks가 런타임 어셈블리를 생성하여 인터페이스 용 모의 객체를 생성해야하는 시점에서 FileNotFoundException이 발생하여 테스트 용 DLL 및 DLL과 동일한 폴더에 실제로 존재하는 사설 DLL 중 하나를 가리 킵니다 테스트중인 클래스를 포함합니다.Moles 호스팅이 종속 어셈블리를 해결할 수 없습니다.

그러나 HostType 특성을 제거하면 모의 인스턴스를 만들 때 예외없이 아무 문제없이 작동합니다.

그래서, 나는이 다음 다음 단계를 사용하여 두더지 호스트 유형 작업을 얻을 수있는 해결 방법을 구축 : 나는에 AppDomain.CurrentDomain.AssemblyResolve 이벤트에 등록

1) 내 [TestInitialize]

2) 이벤트 처리기에서 나는 다음과 같은 논리로 포장 : 테스트가 두더지 HOSTTYPE에서 실행될 때

System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
    { 
     string asmPath = Environment.CurrentDirectory + "\\" + args.Name.Split(',')[0] + ".dll"; 
     if(System.IO.File.Exists(asmPath)) 
      return System.Reflection.Assembly.Load(new System.Reflection.AssemblyName(args.Name)); 
     return null; 
    } 

이 지금 예상대로,이 어셈블리 해결 프로그램이 호출받을 않습니다. 이제 테스트가 실행됩니다.

는 그러나 질문은 아직도 :

난 아직도 우리가 명시 적으로

를 사용하여 내 모든 생산 DLL을 포함하는 폴더 및 테스트 DLL에 응용 프로그램 도메인의 APPBASE 경로를 설정 한 경우에도 별도의 조립 해결이 필요 왜

1)

AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory); 

현재 DLL은 테스트 용 DLL을 포함한 모든 바이너리를 찾을 수있는 bin 폴더입니다.

2) 동일한 종속성이 관련된 다른 제작 DLL을 테스트 할 때이 오류가 발생하지 않는 이유는 무엇입니까?

3)이 문제는 NMock2를 사용할 때도 발생합니다.이 문제는 단지 RhinoMocks 관련 문제인지 확인하려고 시도한 것입니다. 그러나 NMocks2도 RhinoMocks와 동일한 종속 DLL을 사용하여 Reflection.Emit 단계에서 동일한 문제가 있음이 드러났습니다. 이것을 설명하는 방법은 무엇입니까?

답변

0

누락 된 부분은 단위 테스트를 실행할 때 실행중인 앱이 단위 테스트가 응용 프로그램을 호스팅한다는 것입니다. 해당 응용 프로그램의 CurrentDirectory는 아마도 해당 러너가 설치된 디렉토리 일 것입니다. 어셈블리는 매개 변수와 함께 응용 프로그램에 전달됩니다.

은 CurrentDirectory 응용 프로그램의 디렉토리라고 가정이 점 1, 2, 3을 설명하고, 결함이

+0

아니고 단지 내가 현재 디렉토리가 바로 하나 인에 대해 가정. 디버거에서 검사하고 AssemblyResolve() 핸들러에서 볼 수 있듯이 현재 DLL에서 직접 실패한 DLL을로드하고 작동합니다 - 또한 현재 내 디렉토리가 실제로 bin 폴더임을 증명합니다 여기서 DLL은 발견 될 것으로 예상됩니다. 그리고 (2)에서 언급했듯이, 다른 체조 DLL 테스트와 관련된 비슷한 설정은 이러한 체조가 없어도 작동합니다. – Chai