Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用mockito和powermock模拟私有方法时获取java.lang.NullPointerException_Java_Unit Testing_Testng_Mockito_Powermock - Fatal编程技术网

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

尝试使用mockito和powermock模拟私有方法时获取java.lang.NullPointerException,java,unit-testing,testng,mockito,powermock,Java,Unit Testing,Testng,Mockito,Powermock,我试图用mockito/powermock模拟一个私有方法。我得到NullpointerException 我尝试做的一个简单示例是: 实际课程 import com.siriusforce.plugin.common.PluginSystem; import com.wellsfargo.core.business.service.dp.fulfillment.MockitoBusinessService; public class MockitoBusinessOperationImpl

我试图用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)
类方法
java.lang.NullPointerException
位于org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addanswersforstubing(PowerMockitoStubberImpl.java:68)
位于org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.prepareforstubing(PowerMockitoStubberImpl.java:123)
位于org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:91)
在com.wellsfargo.core.business.service.dp.fulfillment.MockitoBusinessServiceTest.TestRecreactePrepaids(MockitoBusinessServiceTest.java:54)上

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


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

我发现了NullPointerException:只需将PowerMockito添加到spy方法中即可MockitoBusinessOperation=PowerMockito.spy(MockitoBusinessOperation);'现在的问题是模仿私有方法,虽然我已经模仿了私有方法,但它仍然得到调用。有人发布了这个问题。但这个解决方案对我不起作用。任何关于为什么模拟没有像预期的那样得到反映的建议。您使用的是doWhen()风格的模拟吗?你能发布一个新的代码样本或修改你的问题吗?很容易被弄糊涂。谢谢