Testen mit Properties ist nicht auf Unittests beschränkt!
Vergleich von Eingaben mit erwarteten Ausgaben
assert("Hallo Welt".split(" ") == Array("Hallo", "Welt"))
Eigenschaft einer Komponente, die unter spezifizierten Bedingungen für alle Eingaben zutrifft
Die Addition der reellen Zahlen ist kommutativ
for all a, b: a + b == b + a
Beim Zusammenfügen von zwei Listen ist die Länge der neuen Liste die Summe der Längen der Ausgangslisten
for all l1, l2: l1.append(l2).length == l1.length + l2.length
java.lang.Comparable
java.lang.Comparable
l1 = [], l2 = [] : l1.append(l2).length == l1.length + l2.length -> true
l1 = [0], l2 = [] : l1.append(l2).length == l1.length + l2.length -> true
l1 = [], l2 = [1]: l1.append(l2).length == l1.length + l2.length -> true
l1 = [1,2], l2 = [] : l1.append(l2).length == l1.length + l2.length -> true
...
forAll {
(x: T, y: T) => (x.compareTo(y) == 0) == x.equals(y)
}
Methoden einer neuen Klasse MyMap sollen sich verhalten wie
die Methoden von HashMap
forAll {
(h: HashMap) =>
val m = MyMap.fromHashMap(h)
m.foo() == h.foo()
}
Wenn Umkehrfunktion vorhanden: x == g(f(x))
forAll {
(s: String) => s == utf8Decode(utf8Encode(s))
}