Ist es möglich, ein Mock-Objekt zu erstellen, das mehrere Schnittstellen mit EasyMock implementiert?Ist es möglich, ein Mock-Objekt zu erstellen, das mehrere Schnittstellen mit EasyMock implementiert?
Zum Beispiel, Schnittstelle Foo
und Schnittstelle Closeable
?
In Rhino Mocks können Sie beim Erstellen eines Mock-Objekts mehrere Schnittstellen bereitstellen, aber die Methode createMock()
von EasyMock verwendet nur einen Typ.
Ist es möglich, dies mit EasyMock zu erreichen, ohne auf den Fallback des Erstellens einer temporären Schnittstelle zurückgreifen zu müssen, die sowohl Foo
als auch Closeable
erweitert, und sich dann darüber lustig macht?
ich stimme dem zu, aber zu erweitern: wenn du es verwendest Dependency-Injection, und Ihre Klasse benötigt sowohl ein Foo als auch ein Closable, Sie sollten wirklich zwei separate Setter für diese haben. Wenn Sie sich entscheiden, dasselbe Objekt für beide zu injizieren, dann ist das großartig, aber ich denke, dass die getestete Klasse nicht wissen muss, dass sie das gleiche Objekt ist - sie sollte Foo als Foo und Closeable als behandeln eine verschließbare –
Nick, Matt, danke für Ihre Eingabe. Um das Szenario zu verdeutlichen, besteht der Zusammenhang darin, dass Foo eine Schnittstelle für ein modulares Add-In-System ist. Module von Drittanbietern implementieren Foo und werden dann vom Framework instanziiert und verwendet. Sie können optional auch Closeable implementieren. In diesem Fall werden sie vom Framework geschlossen, sobald sie fertig sind. Daher müssen die Komponententests zwei verschiedene Szenarien abdecken: Ein Foo, das auch geschlossen werden kann, und ein Foo, das nicht geschlossen werden kann. Ich hoffe das macht Sinn. –
@NickHolt: Ich würde dir nicht voll und ganz zustimmen. Betrachten Sie den Fall, wenn Sie eine Schnittstelle 'Person' haben, die nur getters (' getFirstName() ',' getAddress() ', ...) und die Schnittstelle' ModifyablePerson' hat, die nur Setter ('setFirstName()', ' setAddress() ', ...). Und jetzt wollen Sie ein SUT testen, das 'Person' übernimmt, aber prüft, ob das Objekt 'instanceof ModifyablePerson' übergeben wurde und etwas darauf basiert. 'Closeable' ist auch ein gutes Beispiel: Wenn das Objekt eine" erweiterte "Funktionalität bietet, die explizit von' instanceof' überprüft und ausgenutzt wird, was ist daran schlecht? –