Java mockito verify method called

Выявление определенного поведения у объектов

Кроме создания виртуальных объектов, часто возникает еще одна интересная задача – убедиться, что тестируемый класс вызвал нужные методы нужных объектов. Более того, вызвал нужное число раз, с правильными параметрами и тому подобное.

Для этого в Mockito тоже есть немного магии – семейство методов Mockito.verify(…) . Общее правило, которым задается проверка вызова метода , имеет вид:

Mockito.verify(объект).имяМетода(параметр);
 @ExtendWith(MockitoExtension.class) class VerifyTest < @Mock List mockList; @Test public void whenMockAnnotation() < //вызов метода String name = mockList.get(10); //проверяем вызывался ли метод Mockito.verify(mockList).get(10); > > 

Во время вызова метода verify() мы задали правило, что у объекта mockitoList должен вызваться метод get() с параметром 10.

5.2 Метод verify() с проверкой количества вызовов

Иногда бывают более сложные сценарии проверки. Например, тебе нужно проверить не просто факт, что метод вызывался, а например, что он вызывался 3 раза. Или он у тебя вызывался в цикле и значит должен был вызваться N раз.

Мы не будем спрашивать, можно ли это сделать, мы сразу спросим: как записать такое правило? И опять Mockito нас не подводит. Правило можно задать в виде:

Mockito.verify(объект,количество).имяМетода(параметр);

Важно! Количество – это не тип int , а специальный объект, которые может задавать различные шаблоны. Помнишь разные варианты метода any() ? Тут тоже самое – есть специальные методы, с помощью которых можно задавать различные сценарии:

 String name1 = mockList.get(1); //вызов метода String name2 = mockList.get(2); //вызов метода String name3 = mockList.get(3); //вызов метода //проверяем, что метод get() вызывался 3 раза Mockito.verify(mockList, times(3)).get(anyInt()); 

Ты также можешь потребовать, чтобы кроме указанных вызовов метода, никаких других обращений к объекту не было. Для этого есть правило:

Mockito.verifyNoMoreInteractions(объект);

5.3 Порядок вызова методов

Предыдущие правила никак не регламентировали порядок вызова методов. Правило просто должно выполниться и все. Но бывают ситуации, когда порядок вызовов методов важен и для этого у Mockito тоже есть решение.

Читайте также:  Python create png image

Жесткий порядок вызова методов можно задать с помощью специального объекта InOrder . Сначала его нужно создать:

InOrder inOrder = Mockito.inOrder(объект);

А затем уже ему добавлять правила посредством вызова методов verify() .

 List mockedList = mock(MyList.class); mockedList.size(); mockedList.add("a parameter"); mockedList.clear(); InOrder inOrder = Mockito.inOrder(mockedList); inOrder.verify(mockedList).size(); inOrder.verify(mockedList).add("a parameter"); inOrder.verify(mockedList).clear(); 

5.4 Проверка исключений в Mockito

Факт того, что исключения возникли, проверяется немного по другому. Для этого нужно использовать метод assertThrows() . Общий формат такой проверки имеет вид:

Assertions.assertThrows(исключение.class, () -> объект.имяМетода());
 @ExtendWith(MockitoExtension.class) class ThenThrowTest < @Mock List mockList; @Test public void whenMockAnnotation() < //задаем поведение метода (нужно только для демонстрации) Mockito.when(mockList.size()).thenThrow(IllegalStateException.class); //проверяем бросится ли IllegalStateException при вызове метода size assertThrows(IllegalStateException.class, () -> mockList.size()); > > 

Источник

Mockito Verify

Mockito Verify

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

Mockito Verify methods are used to check that certain behavior happened. We can use Mockito verify methods at the end of the testing method code to make sure that specified methods are called.

Mockito Verify

  • Mockito verify() method can be used to test number of method invocations too. We can test exact number of times, at least once, at least, at most number of invocation times for a mocked method.
  • We can use verifyNoMoreInteractions() after all the verify() method calls to make sure everything is verified. If any method verification is still left, it will fail and provide proper message.
  • verifyZeroInteractions() behavior is same as verifyNoMoreInteractions() method.
  • We can use inOrder() method to verify the order of method invocation. We can skip a method invocation but the methods being verified must be in the same order.

Let’s look at some of the mockito verify method examples.

Mockito verify() simple example

@Test void test() < ListmockList = mock(List.class); mockList.add("Pankaj"); mockList.size(); verify(mockList).add("Pankaj"); > 

Above verify method will pass if add(«Pankaj») is called only once on the mocked list object. It’s the same as calling with times(1) argument with verify method.

verify(mockList, times(1)).size(); 

If we want to make sure a method is called but we don’t care about the argument, then we can use ArgumentMatchers with verify method.

verify(mockList).add(anyString()); verify(mockList).add(any(String.class)); verify(mockList).add(ArgumentMatchers.any(String.class)); 

Note that org.mockito.Mockito class provides static methods for most of the useful methods in the Mockito framework, this helps us in writing fluent code by importing them using import static .

Mockito verify with number of times

Mockito verify() method is overloaded, the second one is verify(T mock, VerificationMode mode) . We can use it to verify for the invocation count.

verify(mockList, times(1)).size(); //same as normal verify method verify(mockList, atLeastOnce()).size(); // must be called at least once verify(mockList, atMost(2)).size(); // must be called at most 2 times verify(mockList, atLeast(1)).size(); // must be called at least once verify(mockList, never()).clear(); // must never be called 

verifyNoMoreInteractions()

This method can be used after all the verify methods to make sure that all the interactions are verified. It will fail the test if there are any unverified interactions on the mocked object.

// all interactions are verified, so below will pass verifyNoMoreInteractions(mockList); mockList.isEmpty(); // isEmpty() is not verified, so below will fail verifyNoMoreInteractions(mockList); 

The second invocation of verifyNoMoreInteractions() will fail with the error message as:

org.mockito.exceptions.verification.NoInteractionsWanted: No interactions wanted here: -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:36) But found this interaction on mock 'list': -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:34) *** For your reference, here is the list of all invocations ([?] - means unverified). 1. -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:18) 2. -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:19) 3. [?]-> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:34) 

One of the great features of Mockito is the exception message, it clearly points out where our test is failing so that we can easily fix it.

verifyZeroInteractions()

verifyZeroInteractions() method behavior is same as verifyNoMoreInteractions() method.

Map mockMap = mock(Map.class); Set mockSet = mock(Set.class); verify(mockList).isEmpty(); verifyZeroInteractions(mockList, mockMap, mockSet); 

Mockito verify only method call

If we want to verify that only one method is being called, then we can use only() with verify method.

Map mockMap = mock(Map.class); mockMap.isEmpty(); verify(mockMap, only()).isEmpty(); 

Mockito Verify Order of Invocation

We can use InOrder to verify the order of invocation. We can skip any method to verify, but the methods being verified must be invoked in the same order.

InOrder inOrder = inOrder(mockList, mockMap); inOrder.verify(mockList).add("Pankaj"); inOrder.verify(mockList, calls(1)).size(); inOrder.verify(mockList).isEmpty(); inOrder.verify(mockMap).isEmpty(); 

Summary

Mockito verify() methods can be used to make sure the mock object methods are being called. If any method call is deleted by mistake, then verify method will throw an error.

You can look at more Mockito examples from our GitHub Repository.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Источник

Оцените статью