Property-Based Testing for Services
Transcript of Property-Based Testing for Services
![Page 1: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/1.jpg)
Property-Based Testing for Services
in Scala
StrangeLoop, 24 September 2015
@jessitron
![Page 2: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/2.jpg)
Property-Based Testing
for Services
in Scala
vs example tests
![Page 3: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/3.jpg)
Property-Based Testing
for Services
in Scala
vs example tests
not only mathy things
& Scalacheck
![Page 4: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/4.jpg)
why are we here?
Testing
![Page 5: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/5.jpg)
why are we here?
Go faster! Don't break things!
![Page 6: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/6.jpg)
why do we test?
![Page 7: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/7.jpg)
why do we test?
confidence that it works
define "it works"
drive good design
![Page 8: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/8.jpg)
confidence that it works
define "it works"
drive good design
![Page 9: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/9.jpg)
How do we know it?
What do we know?
![Page 10: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/10.jpg)
what will we do today?
![Page 11: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/11.jpg)
what will we do today?
Learn prerequisites
See the application under test
Write a test together
![Page 12: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/12.jpg)
input
outputoutput
example tests
side effects
![Page 13: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/13.jpg)
example tests
input
outputoutput
![Page 14: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/14.jpg)
example tests
input
outputoutput
input
outputoutput
input
outputoutput
![Page 15: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/15.jpg)
input
output
![Page 16: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/16.jpg)
output
![Page 17: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/17.jpg)
generate input
run
repe
ated
ly
track failures
narrow down cause
group properties together
![Page 18: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/18.jpg)
generate input
run
repe
ated
ly
track failures
narrow down cause
group properties together
Scalacheck (or Scalatest)
scalacheck.Gen
PropShrink
![Page 19: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/19.jpg)
val house = Item("house")
case class Item(name : String)
listOfItems.map { item => item.name } item.name
![Page 20: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/20.jpg)
listOfItems.map { item => item.name }
listOfItems.map { item => item.name }
![Page 21: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/21.jpg)
listOfItems.map { item => item.name }
listOfItems.map(item => item.name)listOfItems.map(item => item.name)
![Page 22: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/22.jpg)
listOfItems.map( _.name )
listOfItems.map { item => item.name }
listOfItems.map(item => item.name)
![Page 23: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/23.jpg)
listOfItems.map { item => item.name }
listOfItems.map { item => item.name }
![Page 24: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/24.jpg)
for { item <- listOfItems } yield item.name
listOfItems.map { item => item.name }
![Page 25: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/25.jpg)
for { item <- listOfItems } yield item.name
for-comprehension
![Page 26: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/26.jpg)
for { item <- listOfItems } yield item.name
List[Item]
List[String]
![Page 27: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/27.jpg)
for { item <- } yield item.name
itemGenerator
![Page 28: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/28.jpg)
Gen[Item]
Gen[String]
for { item <- } yield item.name
itemGenerator
![Page 29: Property-Based Testing for Services](https://reader035.fdocuments.us/reader035/viewer/2022070523/58ecf2121a28ab79628b4671/html5/thumbnails/29.jpg)
Gen[Item]
Gen[LineItem]
for { item <- itemGenerator price <- priceGenerator } yield LineItem(item, price)
Gen[Price]