【发布时间】:2014-08-17 03:20:01
【问题描述】:
我想模拟一个被测类的私有方法,但是当方法被调用时,方法前两次返回 false,之后它应该返回 false。 这是我尝试过的代码。 这是正在测试的类
public class ClassToTest
{
public void methodToTest()
{
Integer integerInstance = new Integer(0);
boolean returnValue= methodToMock(integerInstance);
if(returnValue)
{
System.out.println("methodToMock returned true");
}
else
{
System.out.println("methodToMock returned true");
}
System.out.println();
}
private boolean methodToMock(int value)
{
return true;
}
}
测试类
import org.junit.Test;
import static mockit.Deencapsulation.*;
import mockit.*;
public class TestAClass
{
@Tested ClassToTest classToTestInstance;
@Test
public void test1()
{
new NonStrictExpectations(classToTestInstance)
{
{
invoke(classToTestInstance, "methodToMock", anyInt);
returns(false);
times = 2;
invoke(classToTestInstance, "methodToMock", anyInt);
returns(true);
times = 1;
}
};
classToTestInstance.methodToTest();
classToTestInstance.methodToTest();
classToTestInstance.methodToTest();
}
}
我这样做是为了得到想要的结果
final StringBuffer count = new StringBuffer("0");
new NonStrictExpectations(classToTestInstance)
{
{
invoke(classToTestInstance, "methodToMock", anyInt);
result= new Delegate()
{
boolean methodToMock(int value)
{
count.replace(0, count.length(), Integer.valueOf(Integer.valueOf(count.toString())+1).toString());
if(Integer.valueOf(count.toString())==3)
{
return true;
}
return false;
}
};
}
};
【问题讨论】:
-
如果你想模拟一个私有方法,这听起来很像你应该将该方法的功能移动到另一个类。
-
这是被测类的私有方法。
-
而且私有方法不应该被测试?
-
我正在测试一个公共方法并想模拟私有方法。
-
我不认为这个问题应该被关闭,因为它引用的“重复”与另一个问题有关 - 如何测试私有方法。这个问题清楚地表明了模拟私有方法的要求,但是对公共方法的测试,其中被测类正在模拟私有方法
标签: java unit-testing junit mocking jmockit