Kann JMockit MockUp mock toString ()?

9

Betrachten Sie das folgende Beispiel MockUp einer Klasse Foo , das Bar im Konstruktor abfängt und dann toString() in Bar ;

implementiert %Vor%

Wenn Foo zufällig toString() überschreibt, funktioniert alles. Andernfalls erhalten Sie eine IllegalArgumentException : "Passende reale Methoden wurden für die folgenden Mocks nicht gefunden". Ich verstehe von hier aus, dass JMockit nicht in Basisklassen sucht und daher keine toString() Methode zum Mock finden kann.

Angenommen, ich kann die Foo-Klasse nicht ändern (in Wirklichkeit kann ich das, aber nur um des Arguments willen), gibt es irgendeine Möglichkeit, toString() nur für diese Foo -Klasse vorzuspielen?

Um klar zu sein, möchte ich alle Instanzen dieser Klasse vortäuschen, nicht nur eine Instanz (mit einfachen Lösungen, die kein MockUp benötigen).

    
Bogdan Calmac 26.09.2015, 14:14
quelle

1 Antwort

0

JMockit verspottet alle Superklassen in der Klassenhierarchie bis , aber ausschließlich java.lang.Object .

Sie könnten in Ihrem Test die Klasse private final definieren, die Bar durch Überschreiben von toString() , die an Bar s toString() delegiert, erweitert, indem Sie super.toString() :

aufrufen %Vor%

Jetzt musst du nur noch in deinem Mock über Baz nicht Bar delegieren.

Auf diese Weise haben Sie eine konkrete und dennoch transparente Implementierung von toString() erhalten, die Sie vortäuschen können, ohne die Bar -Klasse zu berühren, die Sie möglicherweise nicht kontrollieren können.

    
diginoise 18.09.2017 16:53
quelle

Tags und Links