with-redefs не работает в конкретном проекте на Windows
Мне трудно создать простой модульный тест в Clojure, используя with-redefs
за издевательство над виндой. Тестовый код, функция, которую я собираюсь проверить, и функция, которую нужно смоделировать, находятся в разных пространствах имен / файлах:
Тестируемая функция:
(ns com.mynamespace.a
(:require [com.mynamespace.b :as b] ) )
(defn afunc [param]
(b/bfunc param))
Зависимое пространство имен b, которое нужно смоделировать:
(ns com.mynamespace.b)
(defn bfunc [param]
; External call
)
Тестовый код
(ns com.mynamespace.a-test
(:require [com.mynamespace.a :as a]
[com.mynamespace.b :as b] )
(:use [clojure.test]))
(deftest a-tests
(with-redefs [b/bfunc (constantly "dummy")]
(print (a/afunc "test"))
)
)
Я думаю, что я использую with-redefs
правильно, потому что мой модульный тест работает нормально на машинах Linux (Docker-контейнер или виртуальная Ubuntu), но он просто не работает при их выполнении / разработке на моей машине с Windows: with-redefs
привязки не применяются, и тест хочет сделать реальные, например, http-вызовы, которые я хотел бы высмеять. Это тот же случай, если я бегу lein test
или попробуйте выполнить тест из REPL через Eclipse CCW.
Я знаю, что с -redefs ведет себя странно, но, поскольку мой тест хорошо работает в Linux, я думаю, что что-то упустил при запуске теста этого проекта в Windows. Я хотел бы добиться быстрых циклов обратной связи при написании тестов на моей машине с Windows.
Ты хоть представляешь, что я делаю не так? Спасибо Андрас
1 ответ
Оказалось, что эта проблема была характерна для проекта, над которым я работаю, из-за флага -Dclojure.compiler.direct-linking = true jvm-opts.
После отключения прямой ссылки мои тесты также работают на моей машине с Windows. Интересно, почему они перешли на Linux, но, возможно, он не был применен, когда работает lein test
там.