Java PowerMockito:模拟私有方法并在不访问它的情况下获取值
我正在为遗留代码编写java单元测试,我对这方面也是新手。我必须测试以下场景(为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; }
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());
}
}