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('[09az]{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
Release history Release notifications
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size & hash SHA256 hash help  File type  Python version  Upload date 

pystubs2018.5.3.tar.gz (6.0 kB) Copy SHA256 hash SHA256  Source  None 