模拟java.sql.TimeStamp时的AssertionError

模拟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

请在下面找到我的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);
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()

希望有帮助

祝你好运