we used py test in our case studybut we didn' touch on any features that wouldn' have been easily testable using unittest try adapting the tests to use test skipping or funcargs try the various setup and teardown methodsand compare their use to funcargs which feels more natural to youin our case studywe have lot of tests that use similar vigenerecipher objecttry reworking this code to use funcarg how many lines of code does it savetry running coverage report on the tests you've written did you miss testing any lines of codeeven if you have percent coveragehave you tested all the possible inputsif you're doing test-driven development percent coverage should follow quite naturallyas you will write test before the code that satisfies that test howeverif writing tests for existing codeit is more likely that there will be edge conditions that go untested think carefully about the values that are somehow differentempty lists when you expect full oneszero or one or infinity compared to intermediate integersfloats that don' round to an exact decimal placestrings when you expected numeralsor the ubiquitous none value when you expected something meaningful if your tests cover such edge casesyour code will be in good shape summary we have finally covered the most important topic in python programmingautomated testing test-driven development is considered best practice the standard library unittest module provides great out-of-the-box solution for testingwhile the py test framework has some more pythonic syntaxes mocks can be used to emulate complex classes in our tests code coverage gives us an estimate of how much of our code is being run by our testsbut it does not tell us that we have tested the right things in the next we'll jump into completely different topicconcurrency