TDD drogą do oświecenia w Scali

9,092 views

Published on

A presentation about how writing tests can help you learn a language. So at the same time we, I and Tomasz Borek, praise Tests and Test Driven Development as well as the beautiful language Scala.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,092
On SlideShare
0
From Embeds
0
Number of Embeds
7,620
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

TDD drogą do oświecenia w Scali

  1. 1. TDDdrogą do oświecenia w Scali Tomasz Borek Konrad Malawski SFI 2013
  2. 2. Tomasz Borek@gmail.com LAFK => lafkblogs.wordpress.com
  3. 3. Show of Hands Java? Python? Scala? APL? Testing? TDD? REAL TDD? ADHD?
  4. 4. Dziś będzie o: testach, Scali, poznawanie przez testy, narzędziach.
  5. 5. Narzędzia: Scala - język ScalaTest - DSL SBT - Simple Build Tool Mózg a nawet dwa!
  6. 6. Droga do TDDBrak Manualne "PO" "PRZED" TDD
  7. 7. PRAWDZIWY cykl TDDtak, zdarza się, a czasemnawet jest potrzebne! minimum kodu by przeszło Błąd kompilacji ma znaczenie.
  8. 8. Żywa, krzycząca dokumentacja AcceptanceTDD TDDevelopment vs TDDesign
  9. 9. ATDD, dla UFOit should "..." in pendingit should "do things" in { // ...}
  10. 10. ATDD, dla UFO Tests!
  11. 11. ATDD, dla Anime Tests!
  12. 12. Test jednostkowy nie "gada z bazą" nie potrzeba mu Internetu, szybki, odpowiednio nazwany, jasny, przejrzysty, klarowny, testuje jedną rzecz, nie dwie, nie tysiąc
  13. 13. Struktura testubehaviour of "Something"it should "have expressive name" in { // given val anObject : UnderTest = new UnderTest(); // when val result = anObject.testedMethod(); // then result should be ("expressive");}
  14. 14. Struktura testubehaviour of "Something"it should "have expressive name" in { // given val anObject = new UnderTest // when val result = anObject.testedMethod() // then result should be ("expressive")}
  15. 15. The stairway to Scala...
  16. 16. ... or highway to hell?
  17. 17. Scala is... Simple, but Hard.
  18. 18. Scala to język... Funkcyjny, Obiektowy, Statycznie typowany, idealny dla DSLi, na JVMie, by Martin Odersky
  19. 19. Scala Collections
  20. 20. Scala Basics & Collectionsdef greet(p: Person) = println(s"Hello ${p.name}")val people = List(tomek, konrad)people foreach { person => greet(person)}
  21. 21. Scala Basics & Collectionsval people: List[Person]def greet(p: Person)people foreach { greet }people foreach greet
  22. 22. Scala REPL Read Evaluate Print Loop Eksplorowanie uzupełnia Testowanie
  23. 23. Scala Basics & Collections Tests!
  24. 24. Cechy = Traits object with object with wizard traits ranger traits object with nerd and wizard traits
  25. 25. Damage? Dice!
  26. 26. Cechy = Traitsclass D6Dice extends RealDice(maxRoll = 6)object D6 extends D6Diceobject P6 extends D6Dice with PredictableDice
  27. 27. Cechy = Traitsbehavior of "Weapon"it should "hit to cause damage"behavior of "SimpleSword"it should "cause D6 damage"
  28. 28. Cechy = Traits Tests!
  29. 29. Cechy = Traitsbehavior of "SimpleAxe"it should "cause D6 damage"// Axe, Sword... behave like Weapon
  30. 30. Cechy = Traits Tests!
  31. 31. Cechy = Traitsbehavior of "+10 DMG Axe"it should "always cause > 10 damage"
  32. 32. Cechy = Traits Tests!
  33. 33. Cechy = Traitsbehavior of "Sword of Nyarlathotep"it should "roll DMG using D20"it should "have base damage +10 DMG"it should "add panic magic effect"
  34. 34. Podsumowanie - Scala● DSLs,● Collections,● Pattern Matching,● Traits
  35. 35. Podsumowanie - Narzędzia● SBT,● REPL,● ScalaTest,● FlatSpec,● Should Matchers,● Live Templates
  36. 36. Podsumowanie - Testy● Droga do TDD● Testy przed != TDD● Cykl● Błąd kompilacji == Pierwszy Red● Testy jednostkowe, nie integracyjne● Testy jako Dokumentacja● Given When Then
  37. 37. Podsumowanie - Linki● SCKRK / Code Kata / Kraków Scala● Tomasz Kaczanowski - practicalunittesting.com● ScalaTest docs● Scala docs● Martin Odersky - Programming in Scala● Cay Horstmann - Scala for The Impatient● "Bruce Eckels Atomic Scala" in pending ...
  38. 38. THANKS!// todo implement thisbehaviour of "those who ask questions"they should "ask them politely" in pendingthey should "ask them loudly" in pendingthey should "go eat" in pending Konrad Malawski - twitter: @ktosopl Tomasz Borek - @gmail.com SFI 2013

×