2012-05-25 4 views
3

내 테스트를 끝내려면 테스트 어셈블리가 종속 어셈블리의 섀도 복사본을 미리로드하지 않는 것이 중요합니다.리플렉션을 사용하여 빌드 타임 중에 알 수없는 인터페이스의 모의 객체를 생성하십시오.

조립 T는 부하 및 테스트 조립 A. 조립 A는 내가 빌드시 사용할 수를하지 않고 약간의 정적 멤버를 교체해야 테스트를 위해

B.

에 정의 된 인터페이스에 의존하는 Testframework입니다. 여기

내가에서 오전 딜레마 보여 일부 의사 코드 :

 A_assembly = Assembly.LoadFrom("A.dll"); 
     A_type = A_assembly.GetType("TheSingleton.Master", true); 
     MethodInfo Master_Init_Info = type.GetMethod("Init", BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance); 
     //before init is called some things need to be replaced 
     FieldInfo semiknown = A_type.GetField("needsmocking", BindingFlags.Public | BindingFlags.Static)); 
     ??? mock_semiknown = MockRepository.GenerateMock<???>(); 
     semiknown.SetValue((???)mock_semiknown, mock_semiknown); 
     //testing makes only sense if that static is replaced. 
     Master_Init_Info.Invoke(null, null); 
  1. 내가 semiknown.FieldType를 통해 유형에 액세스 할 수 있지만, 나에게 무슨 소용이 않습니다? 그 정보를 여하튼 모의 객체 을 만들고 static 멤버로 대체 할 수 있습니까?
  2. 유형을 가져 와서 고정 회원을 대체 할 수 있다고 가정합니다. 모의 수업에서 내 기대를 어떻게 구축 할 수 있습니까?

답변

1

당신은 반사에 의해 호출 할 수 있습니다

var method = typeof(MockRepository).GetMethod("GenerateMock").MakeGenericMethod(semiknown.FieldType); 
var mock_semiknown = method.Invoke(null, null);