Как вы не делаете частичные насмешки в этом сценарии? - PullRequest
2 голосов
/ 27 августа 2011

Допустим, я написал довольно простой класс с именем ValueFinder, который выглядит следующим образом:

public class ValueFinder {

    public String findValue(Object obj) {
        String value = null;
        value = findValueFirstWay(obj);
        if (value == null) {
            value = findValueSecondWay(obj);
        }
        return value;
    }

    protected String findValueFirstWay(Object obj) {
        ....
    }

    protected String findValueSecondWay(Object obj) {
        ....
    }
}

Теперь я хочу проверить, что findValueFirstWay действительно первый метод, который был предпринят при вызове findValue.Это очень простой класс, «алгоритмы» способов очень просты.Без частичной имитации, где findValueFirstWay и findValueSecondWay подвергаются мошенничеству, а findValue остается один, как мне это проверить?

Я предполагаю, что должен реорганизовать класс так, чтобы findValueFirstWayи findValueSecondWay находятся в отдельном классе или классах?Это просто кажется ненужной работой для чего-то такого простого.

Ответы [ 3 ]

2 голосов
/ 27 августа 2011

Вы можете полностью избежать насмешек и проверить их по видимому эффекту с реальными объектами.

Или вы можете посмеяться над объектами, передаваемыми как значениями, и ожидать любых вызовов, которые findValueFirstWay(Object obj) делает к obj, которые заставляют его возвращать нуль и т. Д.

Однако, хотя это кажется простым, моим первым импульсом все равно будет выделение проблемных методов в отдельный класс или два, чтобы взаимодействие могло бытьболее естественным образом проверено с помощью макетов

1 голос
/ 27 августа 2011

Я согласен. Вы можете использовать шаблон стратегии и определить класс стратегии для каждого из способов, но в такой простой ситуации это кажется излишним. Я не вижу ничего плохого в использовании частичного макета для проверки этого.

0 голосов
/ 27 августа 2011

Почему бы просто не создать подкласс ValueFinder для теста и переопределить два защищенных метода? Таким образом, вы можете отслеживать, что было вызвано в каком порядке (используя флаги, переменные, ...), не перемещая методы в другое место Хотя это будет своего рода «частичное издевательство», не так ли?

...