Что вы хотите сделать в модульном тесте, это убедиться, что метод выполняет ту работу, которую он должен делать. Если метод использует зависимости для выполнения своей работы, вы должны смоделировать эти зависимости и убедиться, что ваш метод вызывает методы для объектов, от которых он зависит, с соответствующими аргументами. Таким образом, вы тестируете свой код изолированно.
Одним из преимуществ этого является то, что он будет направлять дизайн вашего кода в лучшем направлении. Например, чтобы использовать макетирование, вы естественным образом стремитесь к более разъединенному коду, используя внедрение зависимостей. Это дает вам возможность легко заменить ваши фиктивные объекты фактическими объектами, от которых зависит ваш класс. Вы также заканчиваете тем, что внедрили интерфейсы, которые более естественны для насмешки. Обе эти вещи являются хорошими шаблонами проектирования и улучшат ваш код.
Например, чтобы протестировать ваш конкретный пример, ваш класс может зависеть от фабрики создания соединений с базой данных и сборщика для создания параметризованных команд SQL, которые выполняются через соединение. Вы передадите эти смоделированные версии этих объектов своему классу и убедитесь, что были вызваны правильные методы для установки соединения и команды, построения правильной команды, ее выполнения и разрыва соединения. Или, возможно, вы вводите уже открытое соединение и просто создаете команду и вызываете ее. Дело в том, что ваш класс построен на основе интерфейса или набора интерфейсов, и вы используете mocking для предоставления объектов, которые реализуют эти интерфейсы и могут записывать вызовы и предоставлять правильные возвращаемые значения методам, которые вы ожидаете использовать из интерфейса (ов).