Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pragmatic Introduction to Python Unit Testing (PyDays 2018)

244 views

Published on

We will start with a few best practises for unit testing followed by an interactive, hands-on tour through the main features of Python unit testing framework(s). You will learn while writing tests.

Published in: Technology
  • Be the first to comment

Pragmatic Introduction to Python Unit Testing (PyDays 2018)

  1. 1. Pragmatic Introduction to (Python) Unit Testing PyDays Vienna, May 2018 Peter Kofler, ‘Code Cop’ @codecopkofler www.code-cop.org Copyright Peter Kofler, licensed under CC-BY.
  2. 2. Peter Kofler • Ph.D. (Appl. Math.) • Professional Software Developer for 15+ years • “fanatic about code quality” • I help development teams PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  3. 3. I help development teams with PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY ● Professionalism ● Quality and Productivity ● Continuous Improvement
  4. 4. Mentoring PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY ● Pair Programming ● Programming Workshops ● Deliberate Practice, e.g. Coding Dojos
  5. 5. Developing Quality Software Developers
  6. 6. Agenda ● Unit Testing ● Coding (Writing Tests) ● Break? ● Coding (Moar Tests) ● Retrospective PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  7. 7. Quick Poll ● Who has heard of unittest? (xUnit) ● Who has never written a unit test? ● Who has written a few? ● Who writes unit tests every day? ● Who does TDD? PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  8. 8. We Make Mistakes ● at least I do...  ● number of bugs proportional LoC – 7 bugs per 1.000 LoC – 1 bug per 10.000 LoC in critical software ● Assume you have lots of bugs. PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  9. 9. TESTING I FIND YOUR LACK OF TESTS DISTURBING.
  10. 10. What is a Unit Test?
  11. 11. Unit Test (Micro Test) ● code written by a developer ● tests an individual unit ● isolate each part ● shows that the individual part is correct ● sort of living documentation PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  12. 12. What is a Unit (of Work)? ● single logical functional use case ● invoked by some public interface – a single method, – a whole class or – multiple classes ● with one single logical purpose PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  13. 13. What is it made of?
  14. 14. Test Class ● unit test tests the functionality of a unit ● for various inputs and outputs ● usually a single test (class/script) class GreeterTestCase (unittest.TestCase): contains all test cases for Foo PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  15. 15. Test Methods ● a test case tests the response of a single method to a particular set of inputs ● multiple test cases for a single method ● test methods should be short, simple ● tests without test methods are pointless def test_hello_name(self): PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  16. 16. Only one aspect/feature ● tests work best with lots of small tests ● tests only fail because of one reason ● more than 1 assert in test split into multiple tests→ ● 1 test case – 1 method – 1 assertion PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY testHighAndLowInput() testHighInput() testLowInput()
  17. 17. Assertions ● no output from your tests! ● check expectations programmatically ● e.g. self.assertEqual, self.assertTrue, … ● test method without assert is pointless ● test runner reports failure on each test  Regression Testing PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  18. 18. Fixtures ● sets up data needed to run tests ● functions def setUp(self):, def tearDown(self): ● Note: Test data is more likely to be wrong than the tested code! PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  19. 19. A Unit Test should ...
  20. 20. Focus on Behaviour  e.g. requirements are behaviour  names from (problem) domain  full sentences (long, descriptive test method names)  (expected behaviour should)  separation per business module PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  21. 21. Consist of 3 Simple Steps ● Prepare Input – Arrange ● Call Method – Act ● Check Output – Assert ● Use in form of Given-When-Then ● No conditional logic ( more test cases)→ ● No loops ( parametrized test)→ PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  22. 22. Test Code Quality must be equal Prod. Code Quality
  23. 23. Try it yourself PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  24. 24. Coding Dojo Mindset ● Safe place outside work ● We are here to learn ● Need to slow down ● Focus on doing it right ● Collaborative Game PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  25. 25. Assignment ● Find a pair. ● Get https://bitbucket.org/pkofler/python-unittest-koans ● Run run_tests - should see no tests ● Go through the test code ● assertions commented/ incomplete ● uncomment the assertions ● and complete them making tests pass PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  26. 26. →Practice
  27. 27. Closing Circle ● What did you learn today? ● What surprised you today? ● What will you do differently in the future? PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  28. 28. Peter Kofler @codecopkofler www.code-cop.org PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY
  29. 29. CC Images ● green http://www.flickr.com/photos/43442082@N00/296362882/ ● Bruce http://www.flickr.com/photos/sherpas428/4350620602/ ● pairing http://www.flickr.com/photos/dav/94735395/ ● agenda http://www.flickr.com/photos/24293932@N00/2752221871/ ● hands https://www.flickr.com/photos/ninahiironniemi/497993647/ ● Dojo http://www.flickr.com/photos/49715404@N00/3267627038/ ● wants you http://www.flickr.com/photos/shutter/105497713/ PETER KOFLER, CODE-COP.ORG FANATIC ABOUT CODE QUALITY

×