2012-02-17 12 views
5

Potrzebuję dynamicznie tworzyć fałszywy obiekt przez interfejs. Każda metoda i właściwość tego fałszywego obiektu powinna po prostu rzucić wyjątek NotImplementedException. Czy istnieje prosty sposób, aby to zrobić tylko z API .NET Reflections?Tworzenie fałszywego obiektu przez interfejs

+0

Wygląda na to, że trzeba użyć fałszywych bibliotek. Dlaczego musisz mieć klasę z NotImplementedException? Może jest lepsze rozwiązanie niż przy użyciu mocków. – Archeg

+0

Mam jeden zestaw z interfejsami i folderem pełnym złożeń, który zawiera klasy implementujące te interfejsy. Tak więc podczas uruchamiania aplikacji skanuję ten folder i rejestruję wszystkie interfejsy wraz z ich implementacją do kontenera Castle IoC. Ale są pewne brakujące implementacje, więc muszę wygenerować fałszywą klasę, która będzie jedynym wyjątkiem, aby poinformować mnie w czasie wykonywania, że ​​czegoś brakuje. Jest to naprawdę duża aplikacja, więc nie chcę tworzyć tych fałszywych klas ręcznie. –

Odpowiedz

1

Zamek proxy jest schludny biblioteka, która generuje obiekty proxy dla interfejsów w czasie wykonywania. Wszystkie główne szydercze ramy używają także Castle Proxies pod maską.

Krzywa uczenia się jest bardziej stroma niż użycie czegoś podobnego do Moq, ale może być bardziej odpowiednia dla twoich potrzeb, ponieważ Moq został zaprojektowany specjalnie do testów jednostkowych, więc interfejs API może być zbyt "hałaśliwy" dla tego, co Ty. ponownie po.

+0

Proxy zamku działają dobrze. Dzięki za to. –

7

Można użyć fałszywego interfejsu API, takiego jak Moq. Jest przeznaczony do kpienia z testów jednostkowych, ale powinien zrobić to, czego potrzebujesz.

2

Może ImpromptuInterface może pomóc.

Próbkę kodu (skopiowany z jej głównej) wynosi:

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>(); 
Powiązane problemy