Одной из распространенных задач при тестировании кода на Java является создание моковых объектов. Инструментом, который позволяет это делать, является библиотека Mockito. В некоторых случаях может возникнуть необходимость создать «частичный» мок, то есть моковый объект, который имитирует поведение некоторых методов в классе, но не других.
Рассмотрим типичный пример. Пусть у нас есть класс Product
с методами getPrice()
, getQuantity()
и getValue()
. Метод getValue()
вычисляет и возвращает произведение цены и количества продукта.
public class Product { private final double price; private final int quantity; Product(double price, int quantity) { this.price = price; this.quantity = quantity; } public double getPrice() { return price; } public int getQuantity() { return quantity; } public double getValue() { return getPrice() * getQuantity(); } }
Теперь, если мы хотим протестировать метод getValue()
, нам нужно создать моковый объект класса Product
. Однако, мы хотим, чтобы методы getPrice()
и getQuantity()
возвращали моковые значения, а метод getValue()
выполнялся как обычно.
Вот как это можно сделать с помощью Mockito:
@Test public void getValueTest() { Product product = mock(Product.class, CALLS_REAL_METHODS); when(product.getPrice()).thenReturn(100.00); when(product.getQuantity()).thenReturn(200); double value = product.getValue(); assertEquals(100.00*200, value, .00001); }
В этом примере используется метод mock()
, который принимает два аргумента: класс, который нужно замокать, и дополнительные настройки. В данном случае используется константа CALLS_REAL_METHODS
, которая указывает Mockito вызывать реальные методы, если они не были замоканы.
Таким образом, с помощью Mockito можно создавать «частичные» моки и выбирать, какие методы класса должны быть замоканы, а какие нет.
Добавить комментарий