2015-02-23 3 views
5

Недавно я обновился от jMock 2.5.1 до 2.6.0, и, похоже, некоторые из его зависимостей изменились, в результате чего некоторые из моих ранее прошедших тестов завершились с ошибкой.Разрешение объекта или null в ожиданиях jMock

Один из моих тестов имеют следующее математическое ожидание, что используется для общей настройки нескольких тестов:

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) 

Я подозреваю, что это может быть из-за новой версии Hamcrest что JMock 2.6.0 использует, но Я не уверен. Есть ли более подходящий матчи, который я могу использовать для указания как нулевых, так и ненулевых значений для этого метода?

ответ

3

Сделав немного больше исследований, я узнал, что это known change in functionality от jMock 2.5 -> 2.6.

Обходной путь, который я обнаружил, заключается в использовании with.is(anything()), который соответствует нулевым и ненулевым значениям.

+0

Lovely, чтобы увидеть нарушения в незначительном выпуске ... –

+0

Спасибо, я слишком долго искал, как это сделать. Для меня синтаксис был '(Long) с (ничего()), хотя. – neXus

 Смежные вопросы

  • Нет связанных вопросов^_^