Um ein mock-Objekt ist, muss es sein, entweder die Implementierung einer Schnittstelle oder markiert virtuellen?
oder kann die Klasse implementiert eine abstrakte Klasse auch?
- Sie fragte nur im wesentlichen die gleiche Frage vor ein paar Tagen: stackoverflow.com/questions/1969497/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zu verspotten, eine Art, es muss entweder ein interface (das ist auch als rein virtuelle) oder virtuelle Mitglieder (abstrakte member sind auch virtuelle).
Durch diese definition können Sie verspotten alles, was virtuellen.
Im wesentlichen, dynamische mocks nicht tun, was Sie nicht tun konnte, mit der hand.
Lassen Sie uns sagen, Sie sind für die Programmierung gegen ein interface wie dieses:
Könnte man manuell erstellen einer test-spezifischen Implementierung von IMyInterface ignoriert, dass die input-parameter und gibt immer die gleiche Ausgabe:
Jedoch, dass repetitiv wird, wirklich schnell, wenn Sie testen wollen, wie der Verbraucher reagiert auf die unterschiedlichen Werte zurück, also anstatt zu codieren, bis Ihre Test Doubles von hand, können Sie einen Rahmen dynamisch erstellen diese für Sie.
Mir vorstellen, dass dynamische mocks wirklich schreiben Sie code ähnlich dem MyClass Umsetzung oben (Sie wissen eigentlich nicht, schreiben Sie den code, den Sie dynamisch emittieren die Arten, aber es ist ein genau genug, Analogie).
Hier ist, wie könnten Sie das gleiche Verhalten wie MyClass mit Moq:
In beiden Fällen, die construcor der erstellten Klasse wird aufgerufen, wenn das Objekt erstellt wird. Eine Schnittstelle besitzt keinen Konstruktor, wird dies normalerweise die default-Konstruktor von MyClass und dynamisch emittiert Klasse, beziehungsweise).
Können Sie das gleiche tun mit den konkreten Typen wie dieser:
Per hand, Sie wäre in der Lage, eine Ableitung von MyBase, und überschreiben Sie den Ploeh Methode, weil es virtuell ist:
Einem dynamischen mock-Bibliothek kann das gleiche tun, und das gleiche gilt auch für abstrakte Methoden.
Jedoch, Sie können nicht schreiben code, überschreibt eine nicht-virtuellen oder internen member, und kann weder dynamische mocks. Sie können nur tun, was Sie tun können, von hand.
Einschränkung: Die obige Beschreibung gilt für die meisten dynamische mocks mit Ausnahme von TypeMock, die anders und... beängstigend.
Vom Stephen Walther ' s blog: