2017-09-05 1 views
2

Fragen Sie sich nur, wie Sie ein Rückgabeobjekt vom Typ Class aus einer Methode mit EasyMock oder PowerMock mockten?EasyMock und Methoden, die eine generische Klasse zurückgeben

Ich versuche, den Rückgabetyp dieser Schnittstelle Methode

Class<T> getRootBeanClass(); 

ich zu verspotten folgendes versucht, aber ohne Freude

EasyMock.expect(mockViolation.getRootBeanClass()).andReturn(EasyMock.anyObject()); 

ich diese Fehlermeldung

java.lang.IllegalStateException: matcher calls were used outside expectations 
bekommen

Jede Hilfe wird sehr geschätzt

+1

Nur für den Rekord: Sie möchten vielleicht alte Kommentare löschen, die nicht mehr benötigt werden ... – GhostCat

Antwort

2

anyObject() ist ein Argument Matcher.

Sie verwenden es, so dass EasyMock zwischen verschiedenen spottenden Spezifikationen, die Sie aufstellen können, unterscheiden. Wie:

EasyMock.expect(mock.foo(eq("A"), anyObject()).andReturn(resultForA); 

gegen

EasyMock.expect(mock.foo(eq("B"), anyObject()).andReturn(resultForB); 

Das Objekt, das Sie zurückgeben muss ein echte existierendes Objekt sein (das kann entweder getäuscht oder nicht spotten). Aber anyObject() erstellt kein Objekt für Sie!

EasyMock nicht Generika für Sie generiert - so müßte eine Besetzung, so etwas wie:

Class<Foo> foo = (Class<Foo>) mock(Class.class) 

Aber in diesem Fall nicht funktioniert - wie java.lang.Class endgültig! Und EasyMock kann keine finalen Klassen spielen! Dafür brauchst du PowerMock - oder (meine Empfehlung) die neueste Version von Mockito.

Falls Sie sich für Mockito entscheiden: Bitte lesen Sie ihre Dokumentation - wie Sie müssen aktivieren Mocking der letzten Klassen - es ist eine experimentelle Funktion ab sofort.

Verwandte Themen