2010-11-23 2 views
1

환경은 여기의 C# /. 내가 어떤 일에 대한 COM DLL을 사용하는 코드의 조각을 테스트하고있어 내 MS 단위 테스트 단위 테스트 프로젝트에서나란히 실행 및 MS 단위 테스트

4. 인터넷 변환 계산 (이것은 차례로 다른 COM DLL을 사용하므로 세 COM DLL 모두 포함됩니다).

정상적인 응용 프로그램/서비스 설정에서 실행할 때 COM DLL의 어셈블리 ID에 연결하는 매니페스트를 사용하여 side-by-side 실행을 수행하는 데 문제가 없지만 동일한 작업을 시도 할 때 내 단위 테스트 프로젝트에서 예외가 발생하여 항상 실패합니다.

지금, 나는이 이미 시도했다 :

  • 테스트 DLL 매니페스트를 모두 포함하기 매니페스트 테스트 DLL
  • 을 포함하기는 COM DLL을이 매니페스트 +는 COM DLL을 스스로

그러나 아무 소용이 없습니다. 그래서 나는 궁금해 : 유닛 테스트 환경에서 매니페스트를 통해 연결되는 COM을 어떻게 인식 할 수 있습니까? 내게는 DLL 매니페스트 링크가 작동하지 않는 것처럼 보이지만 (EXE 매니페스트가 정상적으로 작동하고 있음) 일반적으로 이러한 종류의 생각은 잘못된 것입니다.

이것과 같은 것입니다. 그러나 이것에 관해서는, 저는 거의 안타가 있었고 이것과 비슷한 것은 없었습니다. 여러분이 어떤 생각이나 의견을 가지고 있다면 공유하십시오 :) 그리고 정교가 필요할 경우, 저에게 알려주십시오.

(필자는 COM dll을 사용하는 것이 적절한 종속성 주입으로 인해 피할 수 있지만 지금은 단위 테스트와 관련하여이 경우를 살펴보고 싶습니다.)

친절 감사

예스퍼는

답변

0

나는 MS 단위 테스트에 익숙하지 않은, 그래서 이것은 단지 추측입니다.

일반적인 응용 프로그램 설정에서는 응용 프로그램 매니페스트를 통해 COM 서버 매니페스트를 참조 했으므로 일반적인 "프로세스 활성화 컨텍스트"에 적절한 참조가 포함되어 있습니다.

단위 테스트 시나리오에서는 프로세스 제어 컨텍스트에 적절한 참조가 없도록 응용 프로그램을 제어하지 않습니다. DLL에 테스트 DLL 매니페스트를 포함 시켰지만 추가 작업을 수행하지 않는 한 정적 DLL 종속성을 매니페스트에 대해 확인할 수 있습니다. 매니페스트 활성화 컨텍스트는 dll 코드가 활성화 될 때마다 "활성"상태가 아닙니다. COM 서버로 호출하는 컨텍스트를 수동으로 만들고 활성화하여이 컨텍스트를 직접 관리해야합니다.

예를 들어, CodePlex의 OneCode 프로젝트에서 CSRegFreeCOMClient을 살펴보십시오.