QCheck_runner
include module type of struct include QCheck_base_runner end
Once you built some tests using QCheck2.Test.make
, you need to run the tests. This module contains several runners, which are designed to run every test and report the result.
By default, you can use run_tests
in a test program as follows:
let testsuite = [
Test.make ...;
Test.make ...;
]
let () =
let errcode = QCheck_base_runner.run_tests ~verbose:true testsuite in
exit errcode
which will run the tests, and exit the program. The error code will be 0 if all tests pass, 1 otherwise.
run_tests_main
can be used as a shortcut for that, also featuring command-line parsing (using Arg
) to activate verbose mode and others.
val random_state : unit -> Random.State.t
Access the current random state
Change the random_state
by creating a new one, initialized with the given seed.
type counter = private QCheck_base_runner.counter = {
start : float;
expected : int;
mutable gen : int;
mutable passed : int;
mutable failed : int;
mutable errored : int;
}
The type of counter used to keep tracks of the events received for a given test cell.
A type to represent polymorphic-enough handlers for test cells.
type handler_gen =
colors:bool ->
debug_shrink:out_channel option ->
debug_shrink_list:string list ->
size:int ->
out:out_channel ->
verbose:bool ->
counter ->
handler
An alias type to a generator of handlers for test cells.
val default_handler : handler_gen
The default handler used.
val debug_shrinking_choices :
colors:bool ->
out:out_channel ->
name:string ->
'a QCheck2.Test.cell ->
step:int ->
'a ->
unit
The function used by the default handler to debug shrinking choices. This can be useful to outside users trying to reproduce some of the base-runner behavior.
val run_tests :
?handler:handler_gen ->
?colors:bool ->
?verbose:bool ->
?long:bool ->
?debug_shrink:out_channel option ->
?debug_shrink_list:string list ->
?out:out_channel ->
?rand:Random.State.t ->
QCheck2.Test.t list ->
int
Run a suite of tests, and print its results. This is an heritage from the "qcheck" library.
val run_tests_main : ?argv:string array -> QCheck2.Test.t list -> 'a
Can be used as the main function of a test file. Exits with a non-0 code if the tests fail. It refers to run_tests
for actually running tests after CLI options have been parsed.
The available options are:
Below is an example of the output of the run_tests
and run_tests_main
function:
random seed: 438308050 generated error; fail; pass / total - time -- test name [✓] (1000) 0 ; 0 ; 1000 / 1000 -- 0.5s -- list_rev_is_involutive [✗] ( 1) 0 ; 1 ; 0 / 10 -- 0.0s -- should_fail_sort_id [✗] ( 1) 1 ; 0 ; 0 / 10 -- 0.0s -- should_error_raise_exn [✓] (1000) 0 ; 0 ; 1000 / 1000 -- 0.0s -- collect_results --- Failure -------------------------------------------------------------------- Test should_fail_sort_id failed (11 shrink steps): [1; 0] === Error ====================================================================== Test should_error_raise_exn errored on (62 shrink steps): 0 exception QCheck_runner_test.Error Raised at file "example/QCheck_runner_test.ml", line 20, characters 20-25 Called from file "src/QCheck.ml", line 839, characters 13-33 +++ Collect ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Collect results for test collect_results: 4: 207 cases 3: 190 cases 2: 219 cases 1: 196 cases 0: 188 cases ================================================================================ failure (1 tests failed, 1 tests errored, ran 4 tests)
module Color = QCheck_base_runner.Color
module Raw = QCheck_base_runner.Raw
include module type of struct include QCheck_ounit end
val to_ounit_test :
?verbose:bool ->
?long:bool ->
?rand:Random.State.t ->
QCheck2.Test.t ->
OUnit.test
to_ounit_test ~rand t
wraps t
into a OUnit test
val to_ounit_test_cell :
?verbose:bool ->
?long:bool ->
?rand:Random.State.t ->
_ QCheck2.Test.cell ->
OUnit.test
Same as to_ounit_test
but with a polymorphic test cell
val (>:::) : string -> QCheck2.Test.t list -> OUnit.test
Same as OUnit.(>:::)
but with a list of QCheck2 tests
val to_ounit2_test : ?rand:Random.State.t -> QCheck2.Test.t -> OUnit2.test
to_ounit2_test ?rand t
wraps t
into a OUnit2 test
val to_ounit2_test_list :
?rand:Random.State.t ->
QCheck2.Test.t list ->
OUnit2.test list
to_ounit2_test_list ?rand t
like to_ounit2_test
but for a list of tests
QCheck provides some custom runners for OUnit tests.
Note that OUnit.run_test_tt
or OUnit.run_test_tt_main
can be used as well, in particular when QCheck tests are mixed with normal unit tests.
For OUnit2 you can use OUnit2.run_test_tt_main
.
val run : ?argv:string array -> OUnit.test -> int
run test
runs the test, and returns an error code that is 0
if all tests passed, 1
otherwise. This is the default runner used by the comment-to-test generator.
val run_tap : OUnit.test -> OUnit.test_results
TAP-compatible test runner, in case we want to use a test harness. It prints one line per test.