2015-11-18 4 views
1

Этот вопрос касается не конкретных библиотек (хотя некоторые из них будут использоваться в конце), но больше о том, как структурировать код приложения, чтобы сделать возможным модульное тестирование функций побочных эффектов. Если мы это сделаем?Как выполнить модульное тестирование функций побочных эффектов в Clojure?

Очевидно, ясно и просто провести тестирование чистых побочных эффектов, вы передаете вход, и вы подтверждаете вывод.

Существует 2 (очень грубо) типа тестирования, единицы измерения и интеграции. Здесь мы сосредоточимся на тестировании устройств.

Таким образом, если у вас есть функция, которая читает файлы или записывает их в файлы (например, slurp/spit) или работает с базой данных или с кольцевым приложением или каналами core.async, как выполнять модульное тестирование такие вещи в Clojure? Применяют ли насмешки, если да, как их определить? Есть ли binding, with-{redefs, redefs-fn, local-vars}? Должен ли я определять defprotocol для того, чтобы реанимировать (ака макет?) Во время модульного тестирования?

Одним из значений тестирования (основное значение?) Является усиление дизайна кода приложения, поэтому, возможно, тестирование в Clojure является особенным в этом смысле, что вы вынуждены структурировать код приложения определенным образом сделать возможными модульные испытания функций побочных эффектов в Clojure?

Или я полностью пропустил пункт?

P.S.1: Мне комфортно работать и разрабатывать приложения Clojure для малого и среднего размера (наверняка еще и путь), хотя часть тестирования до сих пор не ясна для меня полностью.

P.S.2: Еще одна важная тема - интеграционное тестирование в Clojure, но оно заслуживает отдельного вопроса SO.

+0

Представляем [midje] (https://github.com/marick/Midje) – Davyzhu

ответ

1

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

+0

Примером может служить отличное дополнение. Вы знаете что-то конкретное в GitHub, чтобы взглянуть? – akazlou

1

Я настоятельно рекомендую вам избегать with-redefs и друзей, если это вообще возможно. Мы используем протоколы для большинства наших взаимодействий с внешними службами и зависимыми приложениями повсюду, поэтому тестирование - легкий ветерок. Конечно, мы по-прежнему стараемся максимально эффективно выполнять функции и тщательно управлять эффектами, но, как правило, мы были довольны протоколами, когда это необходимо.

Смежные вопросы