Ошибка Mockito: разыскивается, но не вызывается:.. Однако были и другие взаимодействия с этим макетом

Я получаю следующую ошибку, когда пытаюсь смоделировать перегруженные методы, передавая приведенные значения.

Например, чтобы поиздеваться над ABCClass.logWarn(Logger log,String , String description, Throwable e);

Я делаю

`ABCClass.logWarn(null,WarningString, description, (Throwable)null); 
...\\ The rest of the methods are standard...
verify(event).setStatus((Throwable)null);//**Line 76**

Но когда я запускаю свои тестовые примеры, я получаю следующую ошибку

  ABCClassTest.testLogWarn:76 
    Wanted but not invoked:
    MockEvent.setStatus(null);
    -> at com.path.ABCClassTest.testLogWarn(ABCClassTest.java:76)

However, there were other interactions with this mock:.....

Почему ожидается вызов setStatus(null) даже после конкретного вызова setStatus((Throwable)null);?

Дополнительная информация

Определение logWarn

private static void logWarn(String eventType, String eventName, String errMsg, Throwable e) {

        AnEvent event = AnEventFactory.create(eventType);
        event.setName(eventName);
        if(e!=null)
            event.setStatus(e);//so this is never called if the throwable is null.
    //How do I modify the verify behavior?
        /*
                   Bleh */


        event.completed();
    }

person seeker    schedule 13.08.2013    source источник


Ответы (2)


Приведение не изменяет объект, на который ссылается переменная. Это просто заставляет компилятор не жаловаться, когда вы используете переменную таким образом, который не соответствует ее типу. Таким образом, вы действительно передаете null в setStatus, следуя своему verify.

Конечно, если вы спрашиваете, почему setStatus на самом деле не вызывается кодом, который вы тестируете, вам нужно опубликовать его, прежде чем кто-либо сможет вам ответить.

person Dawood ibn Kareem    schedule 13.08.2013
comment
Я думаю, что ваш ответ имеет смысл. Я добавил код метода logWarn, который на самом деле не вызывает setStatus, если переданный аргумент равен Null. - person seeker; 14.08.2013
comment
@DavidWallace.Ive добавил больше деталей к вопросу. Есть предположения? - person seeker; 14.08.2013
comment
Так что я не понимаю вашего вопроса. Ваш код явно не вызывает setStatus, когда e имеет значение null. У вас есть verify, который утверждает, что он действительно вызывается; и естественно, что verify терпит неудачу. Что, по вашему мнению, работает не так? - person Dawood ibn Kareem; 14.08.2013
comment
Извините за шум. Я нашел здесь именно то, что искал. stackoverflow.com/questions/12862659/ - person seeker; 14.08.2013
comment
Хорошо, в вашем вопросе никогда не говорилось, что вы хотели убедиться, что ваш метод НЕ вызывается. Я проголосовал за то, чтобы закрыть ваш вопрос как неясный - любому, у кого есть ваша конкретная проблема, вероятно, лучше не находить этот вопрос. - person Dawood ibn Kareem; 14.08.2013
comment
На самом деле, ДАЖЕ если бы я это назвал, Status никогда не был бы установлен из-за предложения if (e!=null) вокруг его установки. И поскольку я передавал null, я не мог ожидать, что он будет вызван. - person seeker; 14.08.2013

Будучи новичком в Mockito, я не совсем понимал, что ищу. Но это точно что я хотел. Надеюсь, это поможет кому-нибудь еще столкнуться с подобной проблемой.

person seeker    schedule 13.08.2013