Mockito fragt, hinzufügen @PrepareForTest für die Klasse auch nach dem hinzufügen @PrepareForTest
Ich habe folgenden einfachen code. Ich habe eine Klasse (Testklasse), und ich will testen "someMethod". Es ist eine externe statische Methode die aufgerufen wird, durch meine "someMethod".
Ich möchte Powermock, dass statische Methode zurückgegeben mir ein paar dummy-Objekt.
Ich habe die @PrepareForTest(ExternalClass.class) in dem begining, aber wenn ich ausführen, gibt es die Fehlermeldung:
Die Klasse ExternalClass nicht bereit für den test.
Zur Vorbereitung dieser Klasse, Klasse hinzufügen, um die '@PrepareForTest'
annotation.
Im Falle dass, wenn Sie nicht, verwenden Sie diese Anmerkung, hinzufügen der annotation auf Klassen-oder methodenebene.
Bitte helfen Sie mir zu zeigen, was falsch mit der Art, wie ich verwendet habe @PrepareForTest
@RunWith(PowerMockRunner.class)
@PrepareForTest(ExternalClass.class)
public class xyzTest {
@Mock
private RestTemplate restTemplate;
@Mock
private TestClass testClass;
@BeforeClass
private void setUpBeforeClass() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testSuccessCase() {
Boolean mockResponse = true;
ResponseEntity<Boolean> response = new ResponseEntity<Boolean>(mockResponse, HttpStatus.OK);
SomeClass someClass = new SomeClass("test", "1.0.0", "someUrl", "someMetaData");
PowerMockito.mockStatic(ExternalClass.class);
Mockito.when(restTemplate.postForEntity(any(String.class), any(String.class), eq(Boolean.class))).thenReturn(response);
Mockito.when(ExternalClass.getSomeClass(any(String.class))).thenReturn(someClass);
Boolean result = testClass.someMethod("test");
Assert.isTrue(result);
Mockito.verify(restTemplate, times(1)).postForObject(any(String.class), any(String.class), any());
}
}
Ja hab ich, läuft es auf dem desktop JVM (von Oracle, 1.8). Und ExternalClass ist eine benutzerdefinierte Java-Klasse (NICHT-Java-system-Klasse: d.h. java*.*)
Ich sehe, du bist mit
MockitoAnnotations.initMocks(...)
zusammen mit der Verwendung von Powermock JUnit-Runner. Dies ist unnötig. Die Powermock Läufer Ihre setup verspottet. Ich weiß nicht, ob dies helfen wird, deine situation, denn ich habe das gleiche problem, und ich bin nicht eine zusätzliche Aufruf von initialize verspottet.Für mich funktioniert es Prima. Was Mockito & Powermockito Versionen verwenden Sie?
Sie sollten auf jeden Fall prüfen, Ihre Importe wie @Dan vorgeschlagen. Aber Sie könnte auch eine Initialisierungs-problem, verursacht durch
@BeforeClass
annotation angewendet wird, um eine nicht statische Methode setUpBeforeClass
.InformationsquelleAutor ViV | 2016-06-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen Sie sicher, fügen
@RunWith(PowerMockRunner.class)
an die Spitze Ihrer Klasse sowie.InformationsquelleAutor wild_nothing
Als mit der letzten Antwort, mein problem war auch das mischen der Test-annotation von TestNG statt Junit-Test.
Sehr abstruse Fehler, und ich verbrachte mehr als 5 Stunden debugging 🙁
InformationsquelleAutor user2121316
Ich hatte den gleichen Fehler, haben dieses Problem gelöst, durch hinzufügen
innerhalb der test-Klasse.
InformationsquelleAutor Felicia Agatha
Für diejenigen, die versuchen, diese Arbeit mit Junit 5, Wenn Ihr mit der
powermock-module-junit4
beta-Version, die behauptet, kompatibel zu sein mit 4+, wird die Bibliothek noch nicht kennen:und Sie wirft ein:
wenn
@PrepareForTest
angewendet wird, auf die Klasse, die Sie möchten, zu statisches Modell. Wenn Sie verwenden möchten, PowerMock, Sie haben zu gehen zurück in Junit 4 oder erstellen Sie eine MockWrapper für Ihre statische Methode in dieser Zeit.PowerMock 2.0: Github Fahrplan
InformationsquelleAutor Aaron Tobias
Ich hatte den gleichen Fehler aber behoben. Mein problem war, dass ich
powermock-module-junit4
aber meine test-annotation von TestNG anstelle von Junit.InformationsquelleAutor Dan