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
Odpowiedz
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.
Proxy zamku działają dobrze. Dzięki za to. –
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.
Obawiam się, że jedynym rozwiązaniem jest użycie programu Reflection.Emit, a to nie jest bardzo proste :) Aby uzyskać więcej informacji, zobacz artykuł C# Reflection: Emitting classes to existing assemblies lub Reflection Emit.
Moq (jak zasugerowano w innej odpowiedzi) jest biblioteką używającą Reflection.Emit, więc może to być prostsze rozwiązanie! – bang
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>();
- 1. Mockito rzuca NullPointer podczas tworzenia fałszywego obiektu
- 2. Interfejs VB.NET Tworzenie instancji Oddity
- 3. Tworzenie obiektu JFrame i Observable
- 4. Tworzenie obiektu JSON dynamicznie przez JavaScript (bez strun concate)
- 5. Tworzenie stałego obiektu Dictionary
- 6. Inwersja zależności. Tworzenie obiektu
- 7. Tworzenie obiektu GSON
- 8. C# - Tworzenie obiektu
- 9. Tworzenie obiektu z forEach
- 10. AngularJS - tworzenie obiektu usługi
- 11. Tworzenie obiektu UII z CIImage
- 12. Jak przechwycić tworzenie obiektu w Javie
- 13. Zwiększona prędkość pomimo fałszywego współdzielenia
- 14. .NET - Czy możesz przez interfejs, a kiedy nie należy interfejs
- 15. C stubbing. Interfejs dla każdego testowalnego obiektu?
- 16. Tworzenie JSON z C# obiektu
- 17. Tworzenie strumienia z obiektu DirectoryStream
- 18. Tworzenie nowego obiektu ogólnego zamiennika
- 19. tworzenie obiektu json ze zmiennymi
- 20. Tworzenie struktury obiektu klucza złożonego
- 21. Tworzenie obiektu JSON w Rubim
- 22. Tworzenie obiektu klasy na swój statyczny inicjatora
- 23. Tworzenie modelu widoku dla każdego obiektu UITableViewCell
- 24. Interfejs MATLAB MEX do obiektu klasy z wieloma funkcjami
- 25. Kątowa: Przypisz tablicę z obiektu JSON pobranego przez interfejs API do zmiennej
- 26. programowalny zrzut ekranu przedstawiający fałszywego sąsiada
- 27. Parallel Framework i unikanie fałszywego współdzielenia
- 28. Młotek do fałszywego zoomu nie działa
- 29. Tworzenie obiektu po inicjalizacji z ninject
- 30. Dlaczego tworzenie HashMap jest szybsze niż tworzenie obiektu []?
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
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. –