Java Power Mock-模拟最终类时发生断言错误
我试图用powermock模拟某些场景 下面的测试方法-Java Power Mock-模拟最终类时发生断言错误,java,unit-testing,mocking,powermock,Java,Unit Testing,Mocking,Powermock,我试图用powermock模拟某些场景 下面的测试方法-returnSevenTest()出现断言错误 要测试的类 package tutorial.one; public class TutorialOne { //fields private int number; private String name; private final DependentFinalClass finalObj; public TutorialOn
returnSevenTest()
出现断言错误
要测试的类
package tutorial.one;
public class TutorialOne {
//fields
private int number;
private String name;
private final DependentFinalClass finalObj;
public TutorialOne (DependentFinalClass dep) {
this.finalObj= dep ;
}
public TutorialOne(int number, String name) {
super();
this.number = number;
this.name = name;
finalObj = new DependentFinalClass();
}
public static int returnTwo()
{
return 2;
}
public int returnThree()
{
return (returnTwo()+1);
}
public final int returnFour()
{
return (returnThree()+1);
}
private final int returnFive(int addOne)
{
return (returnFour()+addOne);
}
public int returnSix(int addOne)
{
return (returnFive(1)+addOne);
}
public int returnSeven()
{
final int addValue= finalObj.callMeToAddOne(true);
return (returnSix(1)+ addValue);
}
}
期末班
package tutorial.one;
public final class DependentFinalClass {
final int callMeToAddOne(Boolean need)
{
if(need.equals(true))
return 1;
else
return 1;
}
}
使用Power Mock+Easy Mock测试表演类
package tutorial.one;
import stmts ....
@RunWith(PowerMockRunner.class)
//We prepare the IdGenerator for test because the static method is normally not
//mockable
@PrepareForTest({TutorialOne.class, DependentFinalClass.class}) public class TutorialOneTests {
@Test
public void returnSevenTest() throws Exception
{
int expected=7;
TutorialOne privateTest =createPartialMock(TutorialOne.class,"returnFive" );
DependentFinalClass finalDependentTest = createPartialMock(DependentFinalClass.class,"callMeToAddOne" );
expect(finalDependentTest.callMeToAddOne(true)).andReturn(1);
expectNew(TutorialOne.class, finalDependentTest).andReturn(privateTest);
expectPrivate(privateTest, "returnFive", 1).andReturn(5);
replayAll(TutorialOne.class,finalDependentTest,privateTest);
int actual = privateTest.returnSeven();
verifyAll();
assertEquals("Expected and actual did not match", expected, actual);
resetAll();
}
}
收到错误:
java.lang.AssertionError:
验证时的预期失败:
tutorial.one.TutorialOne(tutorial.one.DependentFinalClass$$enhancerByGlib$$fa2e41a0@5a9de6):预期:1,实际:0
位于org.powermock.api.easymock.internal.invocationcontrol.NewInvocationControlAssertionError.throwAssertionErrorForNewSubstitutionFailure(NewInvocationControlAssertionError.java:20)
位于org.powermock.api.easymock.powermock.verifyClass(powermock.java:2279)
位于org.powermock.api.easymock.powermock.verify(powermock.java:1646)
位于org.powermock.api.easymock.powermock.verifyAll(powermock.java:1586)
位于tutorial.one.TutorialOneTests.returnSevenTest(TutorialOneTests.java:174)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
在java.lang.reflect.Method.invoke(未知源代码)
非常感谢您的帮助!!谢谢我认为问题在于您已经声明了期望: expectNew(TutorialOne.class,finalDependentTest).andReturn(privateTest); 但在方法调用中,它未被调用,请尝试在返回后添加anyTimes(): expectNew(TutorialOne.class,finalDependentTest).andReturn(privateTest).anyTimes(); 或者删除此期望,因为在测试中不使用构造函数,而只使用部分模拟实例