我最近从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,但我不确定。是否有更合适的匹配器可用于为此方法指定null和非null值?
答案 0 :(得分:4)
在做了一些研究之后,我从jMock 2.5中了解到这是known change in functionality - > 2.6。
我发现的解决方法是使用with.is(anything())
,它匹配null和非null值。