Этот вопрос касается не конкретных библиотек (хотя некоторые из них будут использоваться в конце), но больше о том, как структурировать код приложения, чтобы сделать возможным модульное тестирование функций побочных эффектов. Если мы это сделаем?Как выполнить модульное тестирование функций побочных эффектов в 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.
Представляем [midje] (https://github.com/marick/Midje) – Davyzhu