Powerful, elegant, easy, documented (http://www.voidspace.org.uk/python/mock/)...
and standard: mock is now part of the Python standard library, available as unittest.mock in Python 3.3 onwards.
Simple example
Let's suppose you have an existing validator function based on a dbsession import used for querying a relational database. If you are going to write unit tests, you should focus on units without involving real database connections.validators.py
from yourpackage import DBSession
def validate_sku(value):
...
courses = DBSession.query(Course).\
filter(Course.course_sku == value).\
filter(Course.language == context.language).\
all()
# validate data returning a True or False value
...
tests/test_validators.py
def test_validator():
import mock
with mock.patch('yourpackage.validators.DBSession') as dbsession:
instance = dbsession
instance.query().filter().filter().all.return_value = [mock.Mock(id=1)]
from yourpackage.validators import sku_validator
assert sku_validator(2) is True
In this case the DBSession call with query, the two filter calls and the final all invocation will produce our mock result (a list of with one mock item, an object with an id attribute).
Brilliant! And this is just one simple example: check out the official documentation for further information:
No comments:
Post a Comment
Note: only a member of this blog may post a comment.