Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Pragmatic Introduction to Python Unit Testing (PyDays 2018)

313 vues

Publié le

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.

Publié dans : Technologie
  • Soyez le premier à commenter

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

×