微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试使用mockito和powermock模拟私有方法时获取java.lang.NullPointerException

我试图用mockito / powermock模拟一个私有方法.我得到NullpointerException
我想要做的简单示例是:

实际课程

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";
    }
}

测试类:

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);

    }
}

当我尝试运行它时,我得到一个NullPointerException:任何解决此问题或任何其他方式模拟私有方法的建议.我不想使用给出保护方法的建议,这意味着改变实际方法.我不希望任何改变实际

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)

解决方法

您必须使用powermockito.spy()而不是Mockito.spy()!

尝试导入静态org.powermock.api.mockito.powermockito.spy;

原文地址:https://www.jb51.cc/java/121762.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐