Tôi đang cố gắng thử một phương thức riêng với mockito/powermock. Tôi nhận được NullPointerException
Các ví dụ đơn giản tôi đang cố gắng làm là:Nhận java.lang.NullPointerException khi cố gắng thử phương pháp riêng với mockito và powermock
lớp thực tế
import com.siriusforce.plugin.common.PluginSystem;
import com.wellsfargo.core.business.service.dp.fulfillment.MockitoBusinessService;
public class MockitoBusinessOperationImpl implements MockitoBusinessOperation{
private MockitoBusinessService mockitoBusinessService = PluginSystem.INSTANCE.getPluginInjector().getInstance(MockitoBusinessService.class);
private Long Id;
public String creditAproved(Long Id){
System.out.println("Came Inside MockitoBusinessOperationImpl");
this.Id = Id;
if (this.Id != null){
System.out.println("Inside creditaproved If statement");
String Report = mockitoBusinessService.creditReport(this.Id);
System.out.println("Mock Object Injected from test class "+ Report);
return Report;
} else
return "Went to Else Part";
}
private String inTestMethod(Long Id){
return "this is working";
}
}
thử nghiệm Class:
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import static org.powermock.api.mockito.PowerMockito.doReturn;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.siriusforce.plugin.common.PluginSystem;
public class MockitoBusinessServiceTest {
@Mock
MockitoBusinessService MockitoBusinessService ;
@InjectMocks
private MockitoBusinessOperation MockitoBusinessOperation = PluginSystem.INSTANCE.getPluginInjector().getInstance(MockitoBusinessOperation.class);
private Long Id;
@BeforeMethod
public void init() {
MockitoAnnotations.initMocks(this);
this.Id = 123L;
}
@PrepareForTest(MockitoBusinessOperation.class)
@Test(enabled = true)
public void testReCalculatePrepaids() throws Exception {
MockitoBusinessOperation = spy(MockitoBusinessOperation);
doReturn("this will work hopefully").when(MockitoBusinessOperation, "inTestMethod", this.Id);
when(MockitoBusinessService.creditReport(this.Id)).thenReturn(new String("Decline by only Me"));
String mainReport = MockitoBusinessOperation.creditAproved(this.Id);
System.out.println("Indirect Call from actual class MainReport " + mainReport);
}
}
Khi tôi cố gắng chạy này tôi nhận được a NullPointerException
: bất kỳ đề xuất nào giải quyết cách này hoặc cách khác để chế nhạo phương thức riêng tư. Tôi không muốn sử dụng gợi ý được đưa ra để thực hiện phương pháp được bảo vệ có nghĩa là thay đổi phương thức thực tế. Tôi không muốn bất kỳ thay đổi đối với thực tế
class method
<failure type="java.lang.NullPointerException">java.lang.NullPointerException
at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addAnswersForStubbing(PowerMockitoStubberImpl.java:68)
at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.prepareForStubbing(PowerMockitoStubberImpl.java:123)
at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:91)
at com.wellsfargo.core.business.service.dp.fulfillment.MockitoBusinessServiceTest.testReCalculatePrepaids(MockitoBusinessServiceTest.java:54)
Tôi tìm ra NullPointerException: chỉ cần thêm PowerMockito vào phương pháp gián điệp. 'MockitoBusinessOperation = PowerMockito.spy (MockitoBusinessOperation);' Bây giờ vấn đề là với mocking phương pháp riêng tư mặc dù tôi đã chế nhạo phương pháp riêng nhưng nó vẫn nhận được cuộc gọi. [Trong một bài đăng khác] (http://stackoverflow.com/questions/8057607/when-mocking-private-method-with-powermock-but-underlying-method-still-gets-cal?rq=1) ai đó đã đăng nội dung này vấn đề. nhưng giải pháp không hiệu quả đối với tôi. bất kỳ đề xuất nào tại sao giả lập không được phản ánh như nó giả định. – jan
Bạn đang sử dụng chế độ nhại doWhen()? Bạn có thể đăng mẫu mã mới hoặc sửa đổi câu hỏi của mình không? –