Tôi có mã đơn giản sau đây. Tôi có một lớp (TestClass) và tôi muốn kiểm tra "someMethod". Có một phương thức tĩnh bên ngoài được gọi là "someMethod" của tôi. Tôi muốn Powermock rằng phương pháp tĩnh để trả lại cho tôi một số đối tượng giả. Tôi có @PrepareForTest (ExternalClass.class) khi bắt đầu, nhưng khi tôi thực hiện nó sẽ đưa ra lỗi:Mockito yêu cầu thêm @PrepareForTest cho lớp ngay cả sau khi thêm @PrepareForTest
Lớp ExternalClass không chuẩn bị để kiểm tra. Để chuẩn bị lớp học này, hãy thêm lớp học vào chú thích '@PrepareForTest'
. Trong trường hợp nếu bạn không sử dụng chú thích này, hãy thêm chú thích ở cấp lớp hoặc phương thức.
Xin hãy giúp tôi chỉ ra những gì là sai với cách tôi đã sử dụng @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());
}
}
Bạn đang chạy lớp này trên JUnit4 trong một JVM máy tính để bàn, phải không? Và ExternalClass là _not_ một lớp hệ thống Java? –
Có, tôi đang chạy nó trên máy tính để bàn JVM (Oracle, 1.8). S ystem class: ví dụ: java *. *) – ViV
Tôi thấy bạn đang sử dụng 'MockitoAnnotations.initMocks (...)' cùng với việc sử dụng Powermock JUnit Runner. Điều này là không cần thiết. Á hậu Powermock sẽ thiết lập mocks của bạn. Tôi không biết nếu điều này sẽ giúp tình hình của bạn, bởi vì tôi có cùng một vấn đề và tôi không thực hiện một cuộc gọi bổ sung để khởi tạo mocks. –