Java PowerMockito:模拟私有方法并在不访问它的情况下获取值

Java PowerMockito:模拟私有方法并在不访问它的情况下获取值,java,unit-testing,mocking,mockito,powermock,Java,Unit Testing,Mocking,Mockito,Powermock,我正在为遗留代码编写java单元测试,我对这方面也是新手。我必须测试以下场景(为testableMethod()编写单元测试用例)。因此,不执行getMode()方法中的code,我想获取mode变量的值 Class A{ public boolean testableMethod() { //code ...... int mode = getMode(); ...... //do something with mode return X; }

我正在为遗留代码编写java单元测试,我对这方面也是新手。我必须测试以下场景(为
testableMethod()
编写单元测试用例)。因此,不执行
getMode()
方法中的
code,我想获取
mode
变量的值

Class A{

 public boolean testableMethod()
 {
   //code
   ......
   int mode = getMode();
   ......
   //do something with mode
   return X;
 }

 private int getMode()
 {
   return ComplexCalls(ComplexMethodCalls(), more());
 }

}
我试着用PowerMockito来做,但没有成功。可以使用PowerMockito模拟此类场景?

您可以使用间谍:



看到所有这些了吗

我已经尝试过这个场景。我使用EclipseIDE调试执行。在本例中,调试指针进入getMode()方法,该方法有非常复杂的代码要测试并出错。如果我想传递几个值,那么?@Inquisitive您可以详细说明您的问题吗?如果该方法具有如下派生类型参数,private int getMode(Person p,String value){return 5;}我需要模拟person类还是只需doReturn(1).when(a,“getMode”,person.class,anyString());够了吗@冈塔德
public class A {
    public boolean testableMethod() {
        return getMode() == 1;
    }

    private int getMode() {
        return 5;
    }
}
import static org.junit.Assert.assertTrue;
import static org.powermock.api.mockito.PowerMockito.doReturn;
import static org.powermock.api.mockito.PowerMockito.spy;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(A.class)
public class ATest {
    @Test
    public void testableMethod_should_do_this() throws Exception {
        A a = spy(new A());

        doReturn(1).when(a, "getMode");

        assertTrue(a.testableMethod());
    }
}