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());
    }
}
Man wird diese Klasse auf JUnit4 in einem desktop-JVM, richtig? Und ExternalClass ist nicht ein Java-system-Klasse?
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

Schreibe einen Kommentar