Einführung in Property-based Testing

Property-based Testing

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:


Hast du schon einmal Property-based Testing eingesetzt? Nutzt du es als Ergänzung oder als Ersatz für die „normalen“ Tests?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax