web-dev-qa-db-ja.com

REPL)から、フィクスチャを使用して1つのClojureテスト(名前空間内のすべてのテストではない)を実行します。

Clojure REPLから(名前空間全体ではなく)1つのテストを実行するにはどうすればよいですか?

関数を直接呼び出してみました。例: (the-ns/the-test)しかし、最初に実行するにはフィクスチャが必要です。そこで、clojure.testからテストを開始する方法を見つけたいと思います。

これは近いですが、私がやりたいこととは一致しません: https://stackoverflow.com/a/24337705/109618

clojure.test API からそれを行う方法についての言及はありません。

27
David J.

これをサポートするためにClojure1.6に追加された新機能がありました。 clojure.test/test-vars フィクスチャを使用して1つ以上のテスト変数を実行します。

私はこのようなものがうまくいくはずだと思います:

(clojure.test/test-vars [#'the-ns/the-test])
32
Alex Miller

フィクスチャを実行しなくてもかまわない場合は、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
4
optevo

名前空間で単一のテストを実行するには:

lein test :only namespace_name/testname

1つの名前空間ですべてのテストを実行するには

lein test :only namespace_name
2
Atty

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 を参照してください

0
Ray H