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 там.

Другие вопросы по тегам