【问题标题】:AssertionError when mocking java.sql.TimeStamp模拟 java.sql.TimeStamp 时出现 AssertionError
【发布时间】:2015-05-12 00:04:41
【问题描述】:

请在下面找到我的 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):预期:1,实际:0 在 org.powermock.api.easymock.internal.invocationcontrol.NewInvocationControlAssertionError.throwAssertionErrorForNewSubstitutionFailure(NewInvocationControlAssertionError.java:21) 在 org.powermock.api.easymock.PowerMock.verifyClass(PowerMock.java:2279) 在 org.powermock.api.easymock.PowerMock.verify(PowerMock.java:1646)

为什么?

【问题讨论】:

    标签: java powermock


    【解决方案1】:

    如果您仔细查看 NewInvocationControlAssertionError 的代码实现(这是抛出的异常) 然后你会注意到当你定义了类似Powermock.expectNew(..)andreturn(..).times(n)的东西时会抛出这种异常,但在要测试的实际代码中,新对象的创建时间少于n次

    在此处查看实现细节 (NewInvocationControlAssertionError)

    所以我建议你总是以这种方式实现它Powermock.expectNew(...).andreturn(...).anyTimes()

    希望对你有帮助!

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多