2017-09-07 1 views
2

J'ai du mal à créer un simple test unitaire dans Clojure en utilisant with-redefs pour se moquer de Windows. Le code de test, la fonction que je suis sur le point de tester et la fonction à moquaient sont tous dans les différents espaces de noms/fichiers:with-redefs ne fonctionne pas dans un projet spécifique sur Windows

Fonction sous test:

(ns com.mynamespace.a 
    (:require [com.mynamespace.b :as b])) 

(defn afunc [param] 
    (b/bfunc param)) 

espace de noms à charge b à se moquaient out:

(ns com.mynamespace.b) 

    (defn bfunc [param] 
    ; External call 
) 

code d'essai

(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")) 
) 
) 

Je pense que je l'utilise with-redefs correctement, parce que mon test unitaire fonctionne bien sur des machines Linux (contenant docker ou Ubuntu virtuel), mais il ne fonctionne tout simplement pas quand les exécuter/développement sur ma machine dev Windows: le with-redefs liaisons sont pas appliqué et le test veut rendre réel par exemple appels http, que je voudrais me moquer. C'est la même chose si je lance lein test, ou si j'exécute le test depuis un REPL via Eclipse CCW.

Je sais que with-redefs a un comportement étrange, mais comme mon test fonctionne bien sur Linux, je suppose que quelque chose me manque quand j'exécute le test de ce projet sous Windows. Je voudrais réaliser des boucles de rétroaction rapides, en écrivant des tests sur ma machine Windows.

Avez-vous une idée de ce que je fais mal? Merci, Andras

+0

Impossible de reproduire avec Clojure 1.8.0 sous Windows 7. –

Répondre

5

est apparu que cette question était spécifique à un projet sur lequel je travaille, en raison de la -Dclojure.compiler.direct-linking = true jvm-drapeau opts. Après avoir désactivé la liaison directe, mes tests fonctionnent également sur ma machine de développement Windows. Je me demande pourquoi ils sont passés sous Linux, mais peut-être que ça n'a pas été appliqué, quand on y a exécuté lein test.