2008-09-25 10 views
7

Ich habe einige Anbieter in C# zu schreiben, die von der Provider Klasse erben. Ich habe festgestellt, dass es schwierig ist, Tests zu schreiben, die die Provider verwenden, da die meisten spöttischen Frameworks Ihnen nur erlauben, eine Schnittstelle zu überspielen.Klassen Mocking, die nicht Schnittstellen

Gibt es eine Möglichkeit, einen Anruf zu einem Anbieter zu verspotten, die von Provider erbt?

Wenn nicht, gibt es ein Muster, das ich benutzen kann spöttisch von Anbietern zu implementieren?

+2

Wenn Sie sagen, „Anbieter“ sprechen wir ASP.NET-Provider? –

Antwort

6

Mocking Frameworks sollten in der Lage sein, für Sie auf einer Klasse basiert, ein Mock-Objekt zu erstellen, solange es virtuelle Mitglieder bekommt ist.

Sie können auch einen Blick auf Typemock

+0

hmm ... Ich habe NMock benutzt und es scheint, dass es eine Einschränkung von NMock ist, keine Einschränkung von Mocking im Allgemeinen. Danke für den Link – lomaxx

6

nehmen will ich wissen Rhino Mocks zu Klassen spotten kann, die meisten anderen spöttischen Frameworks entweder keine Probleme damit haben sollten. Auch
Dinge im Auge zu behalten: Die Klasse nicht abgedichtet werden kann. Sie müssen Methoden markieren, die virtuell simuliert werden sollen, und die Klasse benötigt einen Konstruktor ohne Argumente, der geschützt werden kann, private wird nicht funktionieren. (nur ausprobiert)

Beachten Sie, dass das Mock Framework nur eine Klasse erstellt, die von Ihrer Klasse erbt und ein Objekt dieses Typs erstellt. Konstruktoren werden also aufgerufen. Dies kann zu unerwartetem Verhalten in Ihren Tests führen.

1

RhinoMocks oder Moq erstellt Testdoppel für Klassen sowie für Schnittstellen. Der Typ muss virtuelle Methoden haben oder abstrakt sein. Der Typemock Isolator kommt um diese herum.

Ich würde vorschlagen, dass die Objekte, die Sie verspotten möchten, wahrscheinlich abstrakt sein sollten (dependency inversion principle).

Verwandte Themen