|
|
|
@ -14,6 +14,60 @@
|
|
|
|
|
; See the License for the specific language governing permissions and
|
|
|
|
|
; limitations under the License.
|
|
|
|
|
(ns data-test
|
|
|
|
|
^{:author "Michael Jerger, with contributions and suggestions by razum2um",
|
|
|
|
|
:doc "data-test separates test data from test code and allows a
|
|
|
|
|
more data driven approach for testing. In case of having huge amounts
|
|
|
|
|
of test-input & -expectations your test code will remain readable and concise.
|
|
|
|
|
data-test is founded on and compatible with `clojure.test`. Integration in your
|
|
|
|
|
test environments will work without any changes. For explicit, intentful and
|
|
|
|
|
obvious data, data-test uses aero (see: https://github.com/juxt/aero).
|
|
|
|
|
|
|
|
|
|
USAGE
|
|
|
|
|
Define your data test similar to deftest and express your test e.g. with
|
|
|
|
|
is macro. The given binding [input expected] will let symbols which can be
|
|
|
|
|
used in your test code.
|
|
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
|
|
(ns my.cool.project-test
|
|
|
|
|
(:require [clojure.test :refer :all]
|
|
|
|
|
[data-test :refer :all]))
|
|
|
|
|
|
|
|
|
|
(defdatatest should-test-multiple-specs [input expected]
|
|
|
|
|
(is (= input expected)))
|
|
|
|
|
|
|
|
|
|
Your test data are loaded as resource and therefore data has to be located in
|
|
|
|
|
classpath. The path is determined by your tests namespace and your tests
|
|
|
|
|
definition name. In given case it is
|
|
|
|
|
|
|
|
|
|
my/cool/project_test/should_test_multiple_spec.edn
|
|
|
|
|
|
|
|
|
|
{:input 1
|
|
|
|
|
:expected 1}
|
|
|
|
|
|
|
|
|
|
The keys :input and :expected are fixed, the values can be anything you need.
|
|
|
|
|
You can have up to 11 data specifications for each test.
|
|
|
|
|
|
|
|
|
|
my/cool/project_test/should_test_multiple_spec.[1-9].edn
|
|
|
|
|
|
|
|
|
|
is a valid resource-location also.
|
|
|
|
|
|
|
|
|
|
Test can be executed by using
|
|
|
|
|
|
|
|
|
|
(clojure.test/run-tests)
|
|
|
|
|
|
|
|
|
|
and will produce the usual test-output like:
|
|
|
|
|
|
|
|
|
|
Running namespace tests…
|
|
|
|
|
FAIL in: project_test.clj: 35: should-test-multiple-specs: project_test/should_test_multiple_specs.1.edn:
|
|
|
|
|
expected: 1
|
|
|
|
|
|
|
|
|
|
actual: (2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 tests finished, problems found. 😭 errors: 0, failures: 1, ns: 1, vars: 3
|
|
|
|
|
|
|
|
|
|
The test data resource used will determine the testing context."}
|
|
|
|
|
(:require
|
|
|
|
|
[clojure.test :as t]
|
|
|
|
|
[data-test.reporter :as reporter]
|
|
|
|
|