2015-02-23 6 views
5

Niedawno uaktualniono jMock z wersji 2.5.1 do 2.6.0 i wygląda na to, że niektóre z jego zależności uległy zmianie, powodując, że niektóre z moich wcześniejszych testów zakończyły się niepowodzeniem.Zezwalanie na obiekt lub zerowy w oczekiwaniach jMock

Jeden z moich testów ma następującą oczekiwanie, że używany do wspólnej konfiguracji kilku testów:

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

W moim testowym apartamencie, event jest wywoływana z obu wartości null i ważnych Long. To było całkowicie dopuszczalne w JMock 2.5.1, ale po uaktualnieniu, pojawia się następujący wyjątek:

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) 

mi podejrzewać, że to może być ze względu na nową wersją Hamcrest że JMock 2.6.0 zastosowania, lecz Nie jestem pewien. Czy istnieje odpowiednia właściwość Matcher, której można użyć do określenia wartości NULL i innych niż NULL dla tej metody?

Odpowiedz

3

Po zrobieniu nieco więcej badań, dowiedziałem się, że jest to known change in functionality z jMock 2.5 -> 2.6.

Opisane przeze mnie obejście polega na użyciu wartości with.is(anything()), która dopasowuje wartości zerowe i inne niż NULL.

+0

Nostalgia, aby zobaczyć przełomowe zmiany w niewielkim wydaniu ... –

+0

Dziękuję, zbyt długo szukałem, jak to zrobić. Dla mnie składnia miała postać '(Long) with (anything())'. – neXus

Powiązane problemy