Clojureの初心者として、私はレイニンゲンを使用してサンプルプロジェクトを作成しました。
lein new app first-project
これは私にこのディレクトリを与えました
.
├── doc
│ └── intro.md
├── LICENSE
├── project.clj
├── README.md
├── resources
├── src
│ └── first_project
│ └── core.clj
├── target
│ └── repl
│ ├── classes
│ └── stale
│ └── extract-native.dependencies
└── test
└── first_project
└── core_test.clj
ファイルを変更することなく、失敗した唯一のテストで問題なく起動できます
lein test
...
Ran 1 tests containing 1 assertions.
1 failures, 0 errors.
Tests failed.
しかし、REPLから実行テストを使用して同じことを行うことはできません
lein repl
first-project.core=> (use 'clojure.test)
nil
first-project.core=> (run-tests)
Testing first-project.core
Ran 0 tests containing 0 assertions.
0 failures, 0 errors.
{:type :summary, :pass 0, :test 0, :error 0, :fail 0}
試してみました(ただし機能しません)
(require 'first-project.core-test)
上記の例では、replは間違った名前空間にあります。 replをcore_test
名前空間に切り替えると、より適切に機能する場合があります。次に(run-tests)
を実行します。
(in-ns 'first-project.core-test)
(run-tests)
テストを開発するもう1つの楽しい方法は、テストがREPLから機能するまで実行することです。テストは、追加のメタデータを含む通常の関数であるためです。
(in-ns 'first-project.core-test)
(my-test)
in-ns
を呼び出すだけでなく、ファイルをロードする必要があることを忘れないでください。テストファイルがtests/first_project/core_test.clj
だとすると、次のように呼び出す必要があります。
(load "tests/first_project/core_test")
(in-ns 'first-project.core-test)
(my-test)
ファイルシステムの_
は名前空間の-
になり、/
は.
になることに注意してください。
REPL with lein repl
を開始し、次に require を使用します
(require '[clojure.test :refer [run-tests]])
(require 'your-ns.example-test :reload-all)
(run-tests 'your-ns.example-test)
別の答え で言及されているようにin-ns
で変更するのではなく、user
名前空間に留まることを好みます。代わりに、名前空間を引数としてrun-tests
に渡します(上記を参照)。
(use 'clojure.test)
;から離れることもお勧めします。そのため、上記の(require '[clojure.test :refer [run-tests]])
を提案しました。背景については、 http://dev.clojure.org/jira/browse/CLJ-879 をご覧ください。
要点をまとめると:
方法 require
関数の完全修飾は、以前にin-ns
を発行した場合にのみ必要です。次に行います:
(clojure.core/require '[clojure.core :refer [require]]
'[clojure.test :refer [run-tests]]
'[clojure.repl :refer [dir]])
; Load whatever is in namespace "foo.bar-test" and reload everything
; if `:reload-all` has been additionally given
(require 'foo.bar-test :reload-all)
;=> nil
; List your tests for good measure (Note: don't quote the namespace symbol!)
(dir foo.bar-test)
;=> t-math
;=> t-arith
;=> t-exponential
;=> nil
; Check meta-information on a test to verify selector for example
(meta #'foo.bar-test/t-math)
;=> {:basic-math true, :test #object[foo.bar_tes...
; `run-tests` will probably run nothing because the current namespace
; doesn't contain any tests, unless you have changed it with "in-ns"
(run-tests)
;=> Ran 0 tests containing 0 assertions.
; run tests by giving namespace explicitly instead
(run-tests 'foo.bar-test)
;=> Ran 3 tests containing 29 assertions.