Dummy values for equality testing
Project description
PyStubs: dummy values for equality testing
This tiny Python module provides various types that can be used to check
for conditions using equality (==
) testing. For example, to test whether
a number is less than 5:
>>> from stubs import * >>> 2 == LessThan(5) True
Which is completely equivalent to:
>>> 2 < 5
True
This approach comes in handy when comparing nested containers, such as JSON objects returned by an API:
>>> expected_order = { ... 'id': MatchesRegex('[0-9a-z]{10}'), ... 'quantity': GreaterThan(10), ... 'shippingAddress': Contains('Dublin'), ... 'deliveryDate': ANY, ... 'amount': InRange(200, 500), ... 'items': Contains('apples') & ... Contains('bananas') & ... ~Contains('pears'), ... } >>> expected_order == { ... 'id': 'cxw23fac3n', ... 'quantity': 26, ... 'shippingAddress': '18 Some Street, Dublin, London', ... 'deliveryDate': 'tomorrow', ... 'amount': 300, ... 'items': [ ... 'apples', ... 'avocados', ... 'bananas', ... ], ... } True >>> expected_order == { ... 'id': 'XXX', ... 'quantity': 3, ... 'shippingAddress': '18 Some Other Street, New York City, USA', ... 'deliveryDate': 'yesterday', ... 'amount': 600, ... 'items': [ ... 'apples', ... 'pears', ... ], ... } False
This approach can be very useful in unit testing, to make tests cases shorter and easier to understand.
Installation
PyStubs has no external dependencies. To install it:
$ pip install pystubs
List of stubs
Generics:
Stub | Usage | Equivalent to | Notes |
---|---|---|---|
ANY | x == ANY |
True |
|
PLACEHOLDER | x == PLACEHOLDER |
False |
Meant to be used as a placeholder to be replaced at a later time |
AnyOf | x == AnyOf([...]) |
x in [...] |
|
NoneOf | x == NoneOf([...]) |
x not in [...] |
Equality:
Stub | Usage | Equivalent to | Notes |
---|---|---|---|
Equal | x == Equal(y) |
x == y |
Useful when combined with other stubs |
NotEqual | x == NotEqual(y) |
x != y |
Order:
Stub | Usage | Equivalent to | Notes |
---|---|---|---|
LessThan | x == LessThan(y) |
x < y |
|
LessThanOrEqual | x == LessThanOrEqual(y) |
x <= y |
|
GreaterThan | x == GreaterThan(y) |
x > y |
|
GreaterThanOrEqual | x == GreaterThanOrEqual(y) |
x >= y |
|
InRange | x == InRange(a, b) |
a <= x < b |
Containers:
Stub | Usage | Equivalent to | Notes |
---|---|---|---|
Contains | x == Contains(y) |
y in x |
|
HasSize | x == HasSize(y) |
len(x) == y |
|
CountOf | x == CountOf(y, c) |
x.count(y) == c |
Works on any iterable, even those that don't support count() |
HasItems | x == HasItems({key: value}) |
x[key] = value |
Strings:
These works on both str
and bytes
objects.
Stub | Usage | Equivalent to | Notes |
---|---|---|---|
StartsWith | x == StartsWith(y) |
x.startswith(y) |
|
EndsWith | x == EndsWith(y) |
x.endswith(y) |
|
MatchesRegex | x == MatchesRegex(p) |
re.match(p, x) is not None |
|
ContainsRegex | x == ContainsRegex(p) |
re.search(p, x) is not None |
Type and identity testing:
Stub | Usage | Equivalent to | Notes |
---|---|---|---|
Is | x == Is(y) |
x is y |
|
IsNot | x == IsNot(y) |
x is not y |
|
InstanceOf | x == InstanceOf(type) |
isinstance(x, type) |
Combining stubs
Stubs can be combined with the |
(or), &
(and), ^
(exclusive or) and
~
(not) operators. For example, the following stub expression:
>>> 'apple' == HasSize(5) & Contains('a') True
is equivalent to the expression:
>>> len('apple') == 5 and 'a' in 'apple' True
License
PyStubs is placed in the public domain. Feel free to do whatever you want with it and/or it's source code!
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size pystubs-2018.5.3.tar.gz (6.0 kB) | File type Source | Python version None | Upload date | Hashes View |