Mocking Mailroom
Goal
You should now have a nice mailroom program, complete with an object-oriented structure and bundled up into a nice python package.
And a complete set of unit tests for the logic code.
But your command line user interface code is likely not tested. It’s hard to auto-test user-interaction.
Your mission is to get mailroom fully tested.
Start with your object oriented mailroom in a proper python package.
Coverage
First, run coverage on your current tests. I like pytest-cov
:
$ pip install pytest-cov
$ pytest --cov=mailroom
Or, to get the nifty html output:
$ pytest --cov=mailroom --cov-report html
That will result in a pile of html in an htmlcov
directory. Point your browser to the index.html
file in there, and click away.
Once you’ve run coverage, add tests to get it up close to 100% on your logic code, if it’s not there already.
Fixtures
Fixtures are a really good way to make your tests cleaner and more independent. With mailroom, you should have a couple fixtures that set up a donor database with some data in it, and maybe one or two for Donor
objects.
Clean up your tests with fixtures, and keep the coverage up!
One possible use for a fixture is providing a file to write to for the code that writes files. Or maybe a directory to put the files in, and then it can clean up the dir in teardown.
Mocking input
Once you have 100% coverage for the logic code, it’s time to test the UI.
You should be able to use mocking to mock the input
function, and then actually test your user interface code, too.
Can you get 100% test coverage?