A journey to Property-Based Testing

The purpose of this workshop is to understand by the practice an approach to testing that allows us to identify and check our business invariants. We will discover :

  • How it differs from traditional sampling approach (example-based testing)

  • Its advantages and limits

Source code

Source code is available here in :

  • Scala : Scalatest / Scalacheck

  • C# 10 : XUnit / FsCheck / Language-Ext / FluentAssertions

Connection - Calculator

Connect participants to the topic by making them write Unit Tests on the Calculator class :

Debriefing :

Concepts - PBT

  • Go through slides 4 to 15 to explain the different concepts :

    • Example-Based Testing vs PBT

    • What is PBT ?

    • Addition properties example

    • PBT by hands

    • Scalacheck / FsCheck / QuickCheck

    • Associated concepts

  • Demonstrate how to write properties on the Calculator, you can use the step-by-step guide to prepare yourself

Concrete Practice

Postal Parcel

Open `PostalParcel` :

  • Identify properties – 5’

  • What are the invariants ?

  • Write them in `PostalParcelPropertiesFlatSpec` with ScalaCheck / FsCheck - 15’

  • Collective debriefing – 5’

Bank withdrawal

  • Open `AccountService` :•Identify properties – 5’

  • What should we do to check those properties ?

  • Demonstrate how you could write properties on those knowing that Command and Account are tightly coupled as inputs :

    • Using properties + input filtering (when)

    • Using properties and Builder

    • How we would write tests on Bank withdrawal in real life (with Parameterized tests

Rental Calculator - PBT as a refactoring tool

  • Open `RentalCalculator`

  • Imagine this code is running in production and business is happy with it

  • Imagine you need to adapt it, but you need to be sure that you don’t introduce any regression

  • How PBT can help us ?

  • Let them code - 15'

  • Collective debriefing - 5'

Conclusion

  • When to apply PBT in real life

  • Associated anti-patterns

  • Reflect : Think about your last development, how this approach could have helped you ?

Resources

Last updated