Ho il seguente codice semplice. Ho una classe (TestClass) e voglio testare "someMethod". C'è un metodo statico esterno che è chiamato dal mio "someMethod". Voglio powermock quel metodo statico per restituirmi qualche oggetto fittizio. Ho il @PrepareForTest (ExternalClass.class) all'inizio, ma quando eseguo dà l'errore:Mockito chiede di aggiungere @PrepareForTest per la classe anche dopo aver aggiunto @PrepareForTest
La classe ExternalClass non preparata per il test. Per preparare questa classe, aggiungere la classe all'annotazione '@PrepareForTest'
. Nel caso in cui non si usi questa annotazione, aggiungere l'annotazione a livello di classe o metodo.
Ti prego, aiutami a sottolineare ciò che è sbagliato con il modo in cui ho usato @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());
}
}
È Esegui questa classe su JUnit4 in una JVM desktop, giusto? E ExternalClass è _non_ una classe di sistema Java? –
Sì, lo sto eseguendo su JVM desktop (Oracle, 1.8). E ExternalClass è una classe Java personalizzata (NON Java S classe ystem: java *. *) – ViV
Vedo che stai usando 'MockitoAnnotations.initMocks (...)' insieme all'uso di Powermock JUnit Runner. Questo non è necessario. Il corridore Powermock configurerà i tuoi mock. Non so se questo aiuterà la tua situazione, perché sto avendo lo stesso problema e non sto facendo una chiamata aggiuntiva per inizializzare i mock. –