Ich habe den folgenden einfachen Code. Ich habe eine Klasse (TestClass) und möchte "someMethod" testen. Es gibt eine externe statische Methode, die von meinem "someMethod" aufgerufen wird. Ich möchte PowerStock diese statische Methode, um mir ein Dummy-Objekt zurückzugeben. Ich habe den @ PrepareForTest (ExternalClass.class) am Anfang, aber wenn ich es ausführe, gibt es den Fehler:Mockito fragt, ob @PrepareForTest für die Klasse hinzugefügt werden soll, selbst nachdem @PrepareForTest hinzugefügt wurde
Die Klasse ExternalClass nicht für den Test vorbereitet. Um diese Klasse vorzubereiten, fügen Sie der '@PrepareForTest'
Annotation eine Klasse hinzu. Falls Sie diese Annotation nicht verwenden, fügen Sie die Annotation auf Klassen- oder Methodenebene hinzu.
Bitte helfen Sie mir, darauf hinzuweisen, was mit der Art und Weise falsch ich @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());
}
}
Sie Diese Klasse auf JUnit4 in einer Desktop-JVM ausführen, richtig? Und ExternalClass ist _nicht_ eine Java-Systemklasse? –
Ja, ich verwende es auf Desktop-JVM (Oracle, 1.8) und ExternalClass ist eine benutzerdefinierte Java-Klasse (NICHT Java s ystem-Klasse: d. h. java *. *) – ViV
Ich sehe, Sie verwenden 'MockitoAnnotations.initMocks (...)' zusammen mit dem Powermunk JUnit Runner. Dies ist unnötig. Der Powermock Runner richtet deine Mocks ein. Ich weiß nicht, ob das deiner Situation helfen wird, weil ich das gleiche Problem habe und keinen zusätzlichen Anruf mache, um Mocks zu initialisieren. –