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.
Source Distribution
File details
Details for the file pystubs-2018.5.3.tar.gz
.
File metadata
- Download URL: pystubs-2018.5.3.tar.gz
- Upload date:
- Size: 6.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | dafd6a02bdf4d29f56512e6825b75e74ccd8849b93756dce1a69c6dadc243ffb |
|
MD5 | e9d6edbaa3f6285d725775d2c2a9f837 |
|
BLAKE2b-256 | 617318785f051c2c8d94fc49f19482219b063021b19de591423e5577727705e2 |