1Test::LectroTest::CompaUts(e3r)Contributed Perl DocumentTaetsito:n:LectroTest::Compat(3)
2
3
4
6 Test::LectroTest::Compat - Use LectroTest property checks in a
7 Test::Simple world
8
10 version 0.5001
11
13 #!/usr/bin/perl -w
14
15 use MyModule; # contains code we want to test
16 use Test::More tests => 2;
17 use Test::LectroTest::Compat;
18
19 # property specs can now use Test::Builder-based
20 # tests such as Test::More's cmp_ok()
21
22 my $prop_nonnegative = Property {
23 ##[ x <- Int, y <- Int ]##
24 cmp_ok(MyModule::my_function( $x, $y ), '>=', 0);
25 }, name => "my_function output is non-negative" ;
26
27 # and we can now check whether properties hold
28 # as a Test::Builder-style test that integrates
29 # with other T::B tests
30
31 holds( $prop_nonnegative ); # test whether prop holds
32 cmp_ok( 0, '<', 1, "trivial 0<1 test" ); # a "normal" test
33
35 This module lets you use mix LectroTest property checking with other
36 popular Test::* modules. With it, you can use "is()"- and "ok()"-style
37 assertions from Test::* modules within your LectroTest property
38 specifications and you can check LectroTest properties as part of a
39 Test::Simple or Test::More test plan. (You can actually take advantage
40 of any module based on Test::Builder, not just Test::Simple and
41 Test::More.)
42
43 The module exports a single function "holds" which is described below.
44
45 holds(property, opts...)
46 holds( $prop_nonnegative ); # check prop_nonnegative
47
48 holds( $prop_nonnegative, trials => 100 );
49
50 holds(
51 Property {
52 ##[ x <- Int ]##
53 my_function2($x) < 0;
54 }, name => "my_function2 is non-positive"
55 );
56
57 Checks whether the given property holds.
58
59 When called, this method creates a new Test::LectroTest::TestRunner,
60 asks the TestRunner to check the property, and then reports the result
61 to Test::Builder, which in turn reports to you as part of a typical
62 Test::Simple- or Test::More-style test plan. Any options you provide
63 to "holds" after the property will be passed to the "TestRunner" so you
64 can change the number of trials to run and so on. (See the docs for
65 "new" in Test::LectroTest::TestRunner for the complete list of
66 options.)
67
69 LectroTest can record failure-causing test cases to a file, and it can
70 play those test cases back as part of its normal testing strategy. The
71 easiest way to take advantage of this feature is to set the regressions
72 parameter when you "use" this module:
73
74 use Test::LectroTest::Compat
75 regressions => "regressions.txt";
76
77 This tells LectroTest to use the file "regressions.txt" for both
78 recording and playing back failures. If you want to record and play
79 back from separate files, or want only to record or play back, use the
80 record_failures and/or playback_failures options:
81
82 use Test::LectroTest::Compat
83 playback_failures => "regression_suite_for_my_module.txt",
84 record_failures => "failures_in_the_field.txt";
85
86 See Test::LectroTest::RegressionTesting for more.
87
88 NOTE: If you pass any of the recording or playback parameters to
89 Test::LectroTest::Compat, you must have version 0.3500 or greater of
90 LectroTest installed. Module authors, update your modules' build
91 dependencies accordingly.
92
94 In order to integrate with the Test::Builder testing harness (whose
95 underlying testing model is somewhat incompatible with the needs of
96 random trial-based testing) this module redefines two Test::Builder
97 functions ("ok()" and "diag()") for the duration of each property
98 check.
99
101 For a gentle introduction to LectroTest, see
102 Test::LectroTest::Tutorial. Also, the slides from my LectroTest talk
103 for the Pittsburgh Perl Mongers make for a great introduction.
104 Download a copy from the LectroTest home (see below).
105
106 Test::LectroTest::RegressionTesting explains how to test for
107 regressions and corner cases using LectroTest.
108
109 Test::LectroTest::Property explains in detail what you can put inside
110 of your property specifications.
111
112 Test::LectroTest::Generator describes the many generators and generator
113 combinators that you can use to define the test or condition space that
114 you want LectroTest to search for bugs.
115
116 Test::LectroTest::TestRunner describes the objects that check your
117 properties and tells you how to turn their control knobs. You'll want
118 to look here if you're interested in customizing the testing procedure.
119
120 Test::Simple and Test::More explain how to do simple case-based testing
121 in Perl.
122
123 Test::Builder is the test harness upon which this module is built.
124
126 Tom Moertel (tom@moertel.com)
127
129 The LectroTest project was inspired by Haskell's QuickCheck module by
130 Koen Claessen and John Hughes:
131 http://www.cs.chalmers.se/~rjmh/QuickCheck/.
132
134 Copyright (c) 2004-13 by Thomas G Moertel. All rights reserved.
135
136 This program is free software; you can redistribute it and/or modify it
137 under the same terms as Perl itself.
138
139
140
141perl v5.32.0 2020-07-28 Test::LectroTest::Compat(3)