2012-02-17 3 views
5

인터페이스로 가짜 객체를 동적으로 생성해야합니다. 이 가짜 객체의 모든 메서드와 속성은 NotImplementedException을 throw해야합니다. .NET 리플렉션 API로만이를 수행하는 간단한 방법이 있습니까?인터페이스로 가짜 객체 만들기

+0

모의 라이브러리를 사용해야 할 것 같습니다. NotImplementedException 클래스를 사용해야하는 이유는 무엇입니까? 어쩌면 모의 (mock)를 사용하는 것보다 나은 해결책이있을 수 있습니다. – Archeg

+0

나는 그 인터페이스를 구현하는 클래스를 포함하는 어셈블리로 가득 찬 인터페이스와 폴더가있는 하나의 어셈블리를 가지고 있습니다. 그래서 응용 프로그램을 시작할 때이 폴더를 스캔하여 Castle IoC 컨테이너에 구현 된 모든 인터페이스를 등록합니다. 하지만 일부 구현이 누락되어 있으므로 가짜 클래스를 생성해야합니다.이 클래스는 예외가 발생하여 런타임에 누락 된 부분이 있음을 알려줍니다. 정말 큰 응용 프로그램이므로 이러한 가짜 클래스를 수동으로 만들고 싶지 않습니다. –

답변

1

성 프록시 런타임에 인터페이스에 대한 프록시 객체를 생성하는 깔끔한 라이브러리입니다. 모든 주요 조롱 프레임 워크는 Castle Proxies를 사용합니다.

학습 곡선은 Moq과 같은 것을 사용하는 것보다 가파르다.하지만 Moq은 단위 테스트를 위해 특별히 설계되었으므로 사용자의 요구에 더 적합 할 수 있으므로 API가 ' 다시.

+0

캐슬 프록시가 잘 작동하는 것 같습니다. 고마워. –

7

Moq과 같은 조롱 API를 사용할 수 있습니다. 단위 테스트를 조롱하기 위해 고안되었지만 필요한 것을해야합니다.

2

ImpromptuInterface이 도움이 될 수 있습니다. (홈페이지에서 복사)

샘플 코드는 다음과 같습니다

using ImpromptuInterface; 
    using ImpromptuInterface.Dynamic; 

    public interface IMyInterface{ 

     string Prop1 { get; } 

     long Prop2 { get; } 

     Guid Prop3 { get; } 

     bool Meth1(int x); 
    } 

    //Anonymous Class 
    var anon = new { 
      Prop1 = "Test", 
      Prop2 = 42L, 
      Prop3 = Guid.NewGuid(), 
      Meth1 = Return<bool>.Arguments<int>(it => it > 5) 
    } 

    IMyInterface myInterface = anon.ActLike<IMyInterface>();