Часто разработчики, работающие с библиотекой Mockito для написания тестов в Java, сталкиваются с проблемой проверки аргументов метода. Они хотят убедиться, что метод вызывается с конкретным объектом, а не с любым другим.
Возьмем для примера ситуацию, когда есть некий метод myMethod(Object o), который вызывается внутри другого метода runTestMethod(). И задача состоит в том, чтобы проверить, что myMethod(Object o) был вызван именно с объектом o.
Код может выглядеть примерно так:
Object obj = getObject(); Mockable mock = Mockito.mock(Mockable.class); Mockito.when(mock.myMethod(obj)).thenReturn(null); Testable testableObject = new Testable(); testableObject.setMockable(mock); command.runTestMethod();
И здесь возникает вопрос: как убедиться, что метод myMethod(Object o) вызывается именно с заданным объектом o?
Инстинктивно, многие попытаются использовать Mockito.verify() с Mockito.eq() для проверки:
Mockito.verify(mock.myMethod(Mockito.eq(obj)));
Однако, это не даст ожидаемого результата. Почему? Дело в том, что Mockito.eq() — это аргумент matcher, который сравнивает объекты по значению, а не по ссылке. Это значит, что он пройдет проверку для любого объекта, который «равен» obj.
А что если использовать Mockito.eq() с другими значениями или типами? Как, например, здесь:
Mockito.verify(mock.myMethod(Mockito.eq(null)));
Mockito.verify(mock.myMethod(Mockito.eq("something_else")));
Опять же, это не сработает должным образом, поскольку Mockito.eq() будет просто сравнивать значения, а не ссылки на объекты.
Так как же правильно проверить, что метод был вызван именно с определенным объектом?
Для этого можно использовать Mockito.same(). Этот метод сравнивает объекты по ссылке, а не по значению. Вот как выглядит правильный способ проверки:
Mockito.verify(mock.myMethod(Mockito.same(obj)));
Это гарантирует, что myMethod(Object o) был вызван именно с объектом obj, а не с любым другим. 
В заключение, стоит заметить, что Mockito — мощный инструмент для тестирования, который предоставляет множество возможностей. Однако, как и любой другой инструмент, он требует понимания и внимания при использовании.
 
                     
                                     
                                     Перейти в телеграм, чтобы получить результаты теста
                                            Перейти в телеграм, чтобы получить результаты теста
                                         
                             



 
             
            
         Забрать
                    Забрать
Добавить комментарий