Test like a scientist
Checks that a function abides by a property or hypothesis.
The property is abstracted from any input and output data.
Associative
a + (b + c) = (a + b) + c
listA.append(listB.append(listC)) == (listA.append(listB).append(listC)
Commutative
a + b = b + a
Math.max(a,b) == Math.max(b,a)
Idempotent
f(a) = f(f(a))
Math.abs(x) == Math.abs(Math.abs(x))
Bilbo testing (There And Back Again)
list == list.Reverse().Reverse()
book == book.toDto().toDomain()