2013-01-22 28 views
6

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) 

+1

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

+0

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

Trả lời

11

Bạn phải sử dụng PowerMockito.spy() thay vì Mockito.spy()!

Hãy thử nhập static org.powermock.api.mockito.PowerMockito.spy;