Auf der SEROM 2.0 habe ich über Property-based Testing (PBT) gesprochen. Meine Slides dazu gibt es hier: Property-based Testing mit JUnit-Quickcheck.
Inspiriert zu meinem Vortrag wurde ich von Scott Wlaschin, der auf seinem Blog F# for fun and profit regelmäßig über interessante Ideen aus der funktionalen Programmierung schreibt. Und PBT gehört schon oft dazu.
Die Idee hinter PBT ist, dass man nicht konkrete Beispielwerte in Unit-Tests verwendet, sondern sich zufällige Werte generieren lässt. Das Problem dabei ist, dass man nicht mehr im Vorfeld definieren kann, welche erwarteten Ergebnisse dabei herauskommen müssen. Daher muss man beim Testen etwas anderes vorgehen und allgemeine Eigenschaften seiner Algorithmen prüfen. Daher der Name „Property-based“ Testing.
Eine sehr gute und ausführliche Einführung ins Thema PBT gibt Scott hier: An introduction to property-based testing – Or, why you should be using FsCheck and QuickCheck. Und viele Beispiele für Möglichkeiten, allgemeingültige Eigenschaften von Algorithmen zu finden oder zu konstruieren, die dann getestet werden können, beschreibt er hier: Choosing properties for property-based testing – Or, I want to use FsCheck and Quickcheck, but I can never think of any properties to use.
Es gibt für viele Sprachen inzwischen Frameworks, die PBT ermöglichen. Hier ist eine kleine Auswahl für verbreitete Plattformen:
- Property-based testing, JUnit-style
- Random Testing for .NET
- ScalaCheck: Property-based testing for Scala
- generative testing for PHP
Hast du schon einmal Property-based Testing eingesetzt? Nutzt du es als Ergänzung oder als Ersatz für die „normalen“ Tests?
Neueste Kommentare