Testing with Specificationsλ︎
TODO::work in progress, sorryλ︎
During developmentλ︎
Create specifications for data and functions
Selectively instrument function definitions to check function call arguments against the function specification.
- clojure.spec.test.alpha/instrument - check fdef :args
Unit and integration testingλ︎
Add specification checks along with unit testing and integration testing to provide a very wide range of data values to be tested (with a minimal amount of code).
- clojure.spec.test.alpha/check - use :args to generate tests to check fdef :ret and :fn
run a suite of spec-generative tests on an entire ns with check
. Just one namespace per check
expression?
control the number of values check creates for each check expression. As the default is 1000 the checks can take a noticeable time to run (see practicalli/spec-generative-testing)
Many built-in generators for clojure.core
data predicates
composite specifications can build generators upon predicate generators.
Pass generator-returning functions to spec, supplying generators for things spec does not know about.
Pass an override map to gen
in order to supply alternative generators for one or more sub-paths of a spec.
Define your own generators
At run timeλ︎
Use specifications for run time checking, typically using conform
and valid?
functions.
Specification are typically the minimal checks required for the system, compared to more extensive checks during test and system integration.
Create lightweight private specifications for tests that run in the production environment.