Во время написания тестов на Java с использованием библиотеки Mockito может возникнуть ситуация, когда необходимо замокать метод, который принимает в качестве аргумента объект, создаваемый через оператор new
. Например, есть код:
FooDao fooDao = new FooDao(); Bar bar = fooDao.getBar(new Baz());
И нужно написать тест, в котором метод getBar()
всегда возвращал бы конкретный объект Bar
, независимо от передаваемого в него аргумента. На первый взгляд, это может показаться сложной задачей, ведь при каждом вызове создается новый объект Baz
.
Однако в Mockito существует возможность для таких случаев, и решение проблемы не так сложно, как может показаться. Для этого используется метод any()
.
Метод any()
используется для игнорирования аргументов метода при стабинге. Вместо конкретного объекта в метод when()
передается any()
. Это позволяет замокать метод так, чтобы он возвращал заданный объект независимо от передаваемого в него аргумента.
Например, для метода getBar()
это будет выглядеть следующим образом:
FooDao fooDao = mock(FooDao.class); Bar myBar = new Bar(); when(fooDao.getBar(any(Baz.class))).thenReturn(myBar);
Теперь, независимо от того, какой объект Baz
передается в метод getBar()
, он всегда будет возвращать объект myBar
.
Итак, благодаря использованию метода any()
в Mockito, можно легко замокать метод так, чтобы он возвращал заданный объект независимо от передаваемого в него аргумента. Это очень удобно при написании тестов для кода, где методы вызываются с аргументами, создаваемыми через оператор new
.
Добавить комментарий