2016-06-20 19 views
9

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()); 
    } 
} 
+0

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? –

+1

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

+0

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. –

Trả lời

1

tôi đã có lỗi tương tự nhưng giải quyết nó. Vấn đề của tôi là tôi đã bao gồm powermock-module-junit4 nhưng bao gồm chú thích kiểm tra của tôi từ TestNG thay vì Junit.

5

Đảm bảo bạn thêm @RunWith(PowerMockRunner.class) lên đầu lớp học của mình.

2

Như với câu trả lời cuối cùng, sự cố của tôi cũng đã trộn chú thích Kiểm tra từ TestNG thay vì Kiểm tra Junit.

import org.junit.Test; // works 

import org.testng.annotations.Test // did not work 

lỗi Rất sâu sắc và tôi đã dành hơn 5 giờ gỡ lỗi :(

2

tôi đã có lỗi tương tự, giải quyết điều này bằng cách thêm

@Rule 
public PowerMockRule rule = new PowerMockRule(); 

bên trong lớp thử nghiệm.

Các vấn đề liên quan