java - 在 jMock 期望中允许 Object 或 null

标签 java junit jmock

我最近从 jMock 2.5.1 升级到 2.6.0,它的一些依赖项似乎发生了变化,导致我之前通过的一些测试失败。

我的一个测试具有以下预期,用于多个测试的通用设置:

oneOf(service).event(with(any(Long.class)));

在我的测试套件中,event 被调用时同时带有 null 和有效的 Long 值。这在 jMock 2.5.1 中曾经是完全可以接受的,但是在升级之后,我得到以下异常:

java.lang.AssertionError: unexpected invocation: service.event(null)
expectations:
  expected once, never invoked: service.event(an instance of java.lang.Long)
what happened before this:
  locator.locateService()
  service.getService()
at org.jmock.api.ExpectationError.unexpected(ExpectationError.java:23)
at org.jmock.internal.InvocationDispatcher.dispatch(InvocationDispatcher.java:85)
at org.jmock.Mockery.dispatch(Mockery.java:231)
at org.jmock.Mockery.access$100(Mockery.java:29)
at org.jmock.Mockery$MockObject.invoke(Mockery.java:271)
at org.jmock.internal.InvocationDiverter.invoke(InvocationDiverter.java:27)
at org.jmock.internal.FakeObjectMethods.invoke(FakeObjectMethods.java:38)
at org.jmock.lib.concurrent.Synchroniser.synchroniseInvocation(Synchroniser.java:82)
at org.jmock.lib.concurrent.Synchroniser.access$000(Synchroniser.java:23)
at org.jmock.lib.concurrent.Synchroniser$1.invoke(Synchroniser.java:74)
at org.jmock.lib.JavaReflectionImposteriser$1.invoke(JavaReflectionImposteriser.java:33)
at com.sun.proxy.$Proxy27.system(Unknown Source)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我怀疑这可能是由于 jMock 2.6.0 使用了新版本的 Hamcrest,但我不确定。是否有更合适的匹配器可用于为此方法指定空值和非空值?

最佳答案

在做了更多研究之后,我了解到这是一个 known change in functionality来自 jMock 2.5 -> 2.6。

我发现的解决方法是使用 with.is(anything()),它匹配空值和非空值。

关于java - 在 jMock 期望中允许 Object 或 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678260/

相关文章:

java - Gradle 测试运行两次

java - 无法检索过程的元数据

Java 按元素合并两个列表

java - 使用 JUnit 5 和 Spring Boot 2.0.0 进行嵌套测试

java - 数据库单元: Testing insert and update operations

java - 在 jMock 中捕获方法参数以传递给 stub 实现

java - 如何测试一个类的所有方法都没有在jMock中被调用?

java - 使用 jmock 模拟 Logger.getLogger()

java - 如何让NumberFormat以 double 类型返回

java - j2objc 转换为 Objective C 时出错