1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
Fuzzy attributes
================
.. module:: factory.fuzzy
Some tests may be interested in testing with fuzzy, random values.
This is handled by the :mod:`factory.fuzzy` module, which provides a few
random declarations.
FuzzyAttribute
--------------
.. class:: FuzzyAttribute
The :class:`FuzzyAttribute` uses an arbitrary callable as fuzzer.
It is expected that successive calls of that function return various
values.
.. attribute:: fuzzer
The callable that generates random values
FuzzyChoice
-----------
.. class:: FuzzyChoice(choices)
The :class:`FuzzyChoice` fuzzer yields random choices from the given
iterable.
.. note:: The passed in :attr:`choices` will be converted into a list at
declaration time.
.. attribute:: choices
The list of choices to select randomly
FuzzyInteger
------------
.. class:: FuzzyInteger(low[, high])
The :class:`FuzzyInteger` fuzzer generates random integers within a given
inclusive range.
The :attr:`low` bound may be omitted, in which case it defaults to 0:
.. code-block:: pycon
>>> FuzzyInteger(0, 42)
>>> fi.low, fi.high
0, 42
>>> fi = FuzzyInteger(42)
>>> fi.low, fi.high
0, 42
.. attribute:: low
int, the inclusive lower bound of generated integers
.. attribute:: high
int, the inclusive higher bound of generated integers
FuzzyDate
---------
.. class:: FuzzyDate(start_date[, end_date])
The :class:`FuzzyDate` fuzzer generates random dates within a given
inclusive range.
The :attr:`end_date` bound may be omitted, in which case it defaults to the current date:
.. code-block:: pycon
>>> fd = FuzzyDate(datetime.date(2008, 1, 1))
>>> fd.start_date, fd.end_date
datetime.date(2008, 1, 1), datetime.date(2013, 4, 16)
.. attribute:: start_date
:class:`datetime.date`, the inclusive lower bound of generated dates
.. attribute:: end_date
:class:`datetime.date`, the inclusive higher bound of generated dates
int, the inclusive higher bound of generated dates
Custom fuzzy fields
-------------------
Alternate fuzzy fields may be defined.
They should inherit from the :class:`BaseFuzzyAttribute` class, and override its
:meth:`~BaseFuzzyAttribute.fuzz` method.
.. class:: BaseFuzzyAttribute
Base class for all fuzzy attributes.
.. method:: fuzz(self)
The method responsible for generating random values.
*Must* be overridden in subclasses.
|