模拟java.sql.TimeStamp时的AssertionError
请在下面找到我的java代码模拟java.sql.TimeStamp时的AssertionError,java,powermock,Java,Powermock,请在下面找到我的java代码 Timestamp timestamp = PowerMock.createMock(Timestamp.class); PowerMock.expectNew(Timestamp.class, new Class[] {long.class}, System.currentTimeMillis()).andReturn(timestamp).times(2); PowerMock.replay(timestamp, Timestamp.class); PowerM
Timestamp timestamp = PowerMock.createMock(Timestamp.class);
PowerMock.expectNew(Timestamp.class, new Class[] {long.class}, System.currentTimeMillis()).andReturn(timestamp).times(2);
PowerMock.replay(timestamp, Timestamp.class);
PowerMock.verify(timestamp, Timestamp.class);
然后,我得到下面的错误
java.lang.AssertionError:验证时预期失败:
java.sql.Timestamp(1431344562673):org.powermock.api.easymock.internal.invocationcontrol.NewInvocationControlAssertionError.ThrowasserErrorForNewSubstitutionFailure(NewInvocationControlAssertionError.java:21)上的预期值为1,实际值为0
在
org.powermock.api.easymock.powermock.verifyClass(powermock.java:2279)
位于org.powermock.api.easymock.powermock.verify(powermock.java:1646)
为什么?如果您仔细查看了NewInvocationControlAssertionError的代码实现(这是抛出的异常) 然后您会注意到,当您定义了类似于
Powermock.expectNew(..)andreturn(..).times(n)
的内容时,会引发此类异常,但在要测试的实际代码中,新对象的创建次数少于n次
请查看此处的实施细节()
所以我建议您始终以这种方式实现它Powermock.expectNew(…).andreturn(…).anyTimes()
希望有帮助
祝你好运