Mam następujący prosty kod. Mam klasę (TestClass) i chcę przetestować "someMethod". Istnieje zewnętrzna metoda statyczna, która jest wywoływana przez mój "someMethod". Chcę Powermock tej statycznej metody, aby zwrócić mi jakiś obojętny obiekt. Mam @PrepareForTest (ExternalClass.class) na początku, ale po uruchomieniu daje błąd:Mockito prosi o dodanie @PrepareForTest dla klasy nawet po dodaniu @PrepareForTest
Klasa ExternalClass nie przygotowany do testu. Aby przygotować tę klasę, dodaj klasę do adnotacji '@PrepareForTest'
. Jeśli nie używasz tej adnotacji, dodaj adnotację na poziomie klasy lub metody.
Proszę mi pomóc wskazać, co jest nie tak ze sposobem Użyłem @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());
}
}
Ty uruchamiasz tę klasę na JUnit4 w wirtualnej maszynie JVM, prawda? I ExternalClass nie jest klasą systemu Java? –
Tak, używam go na JVM na komputer (Oracle, 1.8), a ExternalClass to niestandardowa klasa Java (NIE JAVA s Klasa ystem: np. java *. *) – ViV
Widzę, że używasz 'MockitoAnnotations.initMocks (...)' wraz z używaniem Powermock JUnit Runner. To nie jest konieczne. Biegacz Powermock skonfiguruje Twoje drwiny. Nie wiem, czy to pomoże twojej sytuacji, ponieważ mam ten sam problem i nie robię dodatkowego połączenia, żeby zainicjować mocks. –