Clojure REPLから(名前空間全体ではなく)1つのテストを実行するにはどうすればよいですか?
関数を直接呼び出してみました。例: (the-ns/the-test)
しかし、最初に実行するにはフィクスチャが必要です。そこで、clojure.test
からテストを開始する方法を見つけたいと思います。
これは近いですが、私がやりたいこととは一致しません: https://stackoverflow.com/a/24337705/109618
clojure.test API からそれを行う方法についての言及はありません。
これをサポートするためにClojure1.6に追加された新機能がありました。 clojure.test/test-vars フィクスチャを使用して1つ以上のテスト変数を実行します。
私はこのようなものがうまくいくはずだと思います:
(clojure.test/test-vars [#'the-ns/the-test])
フィクスチャを実行しなくてもかまわない場合は、run-tests
を呼び出す前に次のことを行うことができます。
(defn test-ns-hook []
(my-test))
フックを外すには、次のことができます
(ns-unmap *ns* 'test-ns-hook)
それでもフィクスチャが必要で、1つのテスト名前空間を使用したい場合は、ns-unmap
を追加して、次のようなモデルでモデル化されたテストを実行する前に、実行したくないすべてのテスト/フィクスチャを名前空間から削除できます。
(doseq [v (keys (ns-publics 'my-ns))]
(let [vs (str v)]
(if (.startsWith vs "test-") (ns-unmap 'my-ns v))))
複数の名前空間を操作する方が簡単な場合があります。そのうちの1つにはすべてのテストとフィクスチャが含まれ、他の名前空間にはrefer
からメインのテスト名前空間から実行するテストとフィクスチャが含まれます。次に、ns
を使用して特定のテスト名前空間に切り替えるか、テストする名前空間をrun-tests
に渡すことができます。
(ns test-main
(:require [clojure.test :refer :all]))
(deftest addition
(is (= 4 (+ 2 2)))
(is (= 7 (+ 3 4))))
(deftest subtraction
(is (= 1 (- 4 3)))
(is (= 3 (- 7 4))))
(run-tests)
;Runs all the tests
(ns test-specific
(:require [clojure.test :refer :all]
[test-main :refer :all]))
(deftest arithmetic
(subtraction))
(run-tests)
;Just runs the tests you want
名前空間で単一のテストを実行するには:
lein test :only namespace_name/testname
1つの名前空間ですべてのテストを実行するには
lein test :only namespace_name
Clojure.testの優れた代替手段(依存関係を追加しても問題がない場合はeftest
です)。このライブラリは代替ランナーです(clojure.testと互換性があります)。柔軟なテストセレクターがあります(つまり、フォルダー別、名前空間別、変数別)。
REPLでは、次のようなものを実行できます。
(require '[eftest.runner :refer [find-tests run-tests]]) (run-tests (find-tests #'foo.bar/baz))
https://github.com/weavejester/eftest を参照してください