Practicing Advanced Unit Testing

  • 4,845 views
Uploaded on

Doing Code Katas alone or in a Dojo can help sharpen our elementary skills as software developers. Practicing IDE shortcuts and TDD mini-step cycles is very useful for the daily business, yet I find …

Doing Code Katas alone or in a Dojo can help sharpen our elementary skills as software developers. Practicing IDE shortcuts and TDD mini-step cycles is very useful for the daily business, yet I find some existing Code Katas too far away from real-life programming situations.

That’s why I came up with the Trading Card Game Kata – which is (very loosely) based on Blizzard Entertainment’s free-to-play online-game “Hearthstone – Heroes of Warcraft”. This Kata is focused on practicing TDD in a slightly more complex (but not complicated) situation where you might have to think about rules like Single Responsibility Principle or Command Query Separation and might even feel the urge to use a Mocking framework at some point. The rules are kept very simple to begin with but can be extended easily to make the Kata more challenging or concentrate on specific aspects of software development.

In this talk I will first introduce the ideas of Katas in general and explain the TCG Kata rules to you. Then I will present some real-life best practices for writing good developer tests, using my TCG Kata sample solutions as a showcase. This will include:

* Picking the right Test Double
* Test Data Builders
* Behavior Tests with BDDMockito
* Prose-like Assertions with Hamcrest
* Readability Sugar
* Custom Matchers against Test Diabetes

The full Kata ruleset and sample solutions in Java 8 (JUnit4, Mockito, Hamcrest) and Groovy (Spock) can be found on https://github.com/bkimminich/kata-tcg.

A recording of this talk at „Agile Saturday X“ in Tallinn, Estonia can be found on https://vimeo.com/92886146.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,845
On Slideshare
0
From Embeds
0
Number of Embeds
9

Actions

Shares
Downloads
23
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Practicing Advanced Unit Testing v2.3.2 (17.09.2014) withthe «Trading Card Game» Kata Battlecry: Draw a slide. Deathrattle: Transform audience into 1/1 sheep. Speaker
  • 2. Kata Kata (型or 形literally: "form”) is a Japanese word describing detailed choreographed patterns of movements practiced either solo or in pairs.
  • 3. Trading Card Game (TCG) A […] trading card game (TCG) […] is a card game that uses specially designed sets of playing cards […] mass-produced for trading or collectibility, and it must have rules for strategic game play. Acquiring these cards may be done by trading with other players or buying card packs.
  • 4. Why invent another Kata? Bro, why U not use ????? Rules not extensible Not TDD-friendly Too easy
  • 5. Hearthstone: Heroes ofWarcraft®
  • 6. Kata Trading Card Game
  • 7. Player Setup Health Mana 30 0/0 0 0 1 2 2 2 3 3 3 4 4 4 5 6 6 7 8 Deck 1 3 5 Hand
  • 8. Cause 1 Damage 30 0/0 30 2 7 Active Player 1 3 5 8 01//11 Gameplay 2 3 Play Card 1 29 0/0 Draw Card -1 Receive +1 Replenish Mana Slot Mana Pay 1 Mana Game Table Draw extra Card
  • 9. Forced Turn Skip 0/1 30 1/1 29 5 8 2 3 2 2 4 3 No affordable Cards 2/2 7
  • 10. 2/-2 29 27 4 Ongoing Gameplay 0/2 30 1/1 5 8 2 3 2 3 4 2 2 7
  • 11. 12 4 Overload Rule 8/8 18 7/7 5 8 7 6 1 0 8 2 Discard Card when Hand already holds 5 Cards 7
  • 12. Mana Cap 10/10 4 5 8 10/10 6 Mana is 6 1 capped at 10 Slots
  • 13. Bleedout Rule Cause 1 Damage 10/10 4 5 8 10/10 Drawing from empty 6 6 1 Deck 7-1
  • 14. Game End 10/10 4 5 4/10 7 10/10 --62 6 6 1 Winner! Loser!
  • 15. Kata TCG Rules & Variations https://github.com/bkimminich/kata-tcg Detailed rules description Advanced Variations Healing cards Use cards as Minions Different cost & damage Card drawer cards Deck customization
  • 16. Kata TCG Sample Solution in Java https://github.com/bkimminich/kata-tcg Java 8 Lambdas & Stream API Junit Mockito For handling dependencies of tested objects Hamcrest Matchers for better legibility in assertions System Rules JUnit@Rules for substituting java.lang.System
  • 17. Other Sample Solutions https://github.com/bkimminich/kata-tcg Groovy Spock JavaScript Karma Jasmine PhantomJS
  • 18. Advanced Unit Testing Examples
  • 19. Skip No-Brainers … Compile Error as Red Test Red Refactor Green
  • 20. Obvious Implementation Simplest possible step Simplest useful step
  • 21. Specify theObject under Test Irrelevant Details Setter introduced for testing Implementation Detail Assuming Hidden Default
  • 22. Define theObject under Test Another unwanted setter Hidden default problem solved
  • 23. Builder Pattern Reads like natural language Explicitly listed Expectations No unnecessary details …?
  • 24. Builder Internals Sensible Default Values Package visible full Constructor needed
  • 25. Fluent API Setting properties via fluent API
  • 26. Mocking Behavior Interface has no implementation yet Mock Behavior for this Test
  • 27. Trashcan Refactoring CardPicker turned out to be overengineered Mocking
  • 28. Mocking BDD Style Can be confused with Given-When-Then part Can be confused with Given-When-Then part
  • 29. Mocking BDD Style Sugar coating for BDD syntax Matches its meaning in Given-When-Then structure
  • 30. Avoid Redundancy Redundant & spoiled with Implementation Details Another slight redundancy
  • 31. Avoid Constants Disturbs the reading flow
  • 32. Syntactic Sugar Improves Legibility and removes Redundancy
  • 33. More Syntactic Sugar Magic Numbers Different Level of Abstraction
  • 34. Syntactic Artificial Sweetener No-Op Syntactic Sugar for Legibility Syntactic Sugar reduces Redundancy
  • 35. Test Diabetes Too much Sugar is bad for your Test Customer Matchers can medicate this
  • 36. Custom Matcher Encapsulation of Expectation Produces helpful Error Messages Even better with just a little bit of Sugar
  • 37. Demo | Q&A
  • 38. Demo: Test Execution Pretty fast All tests pass
  • 39. Demo: Code Coverage
  • 40. UglUygRleytUroI UI Demo: Human vs. AI Game Player Input via System.in AI beats me! Again! 
  • 41. Thank you for your attention! Recording of this talkat „Agile SaturdayX“ in Tallinn, Estonia https://vimeo.com/92886146 https://twitter.com/bkimminich https://linkedin.com/in/bkimminich https://google.com/+BjörnKimminich http://slideshare.net/BjrnKimminich/
  • 42. Credits Background Image: Demonplay (Permission of use granted) Other Images: Blizzard Entertainment (Permission of use requested) Wikipedia, Github, Agile Estonia Allmystery.de, Gueball.de, Natekohl.net, Scenicreflections.com Hearthstone: Heroes of Warcraft® is a trademark or registered trademark of Blizzard Entertainment, Inc., in the U.S. and/or other countries.