scenario based testing

Pre/post conditions in the langauge

verifications embedded and enforced in the language itself

Eifel programming language

code contracts in C#/F#

problem: with the compiler level implementation, you lose testability - since the compiler fails compiling code that violates these constraints, you cannot add tests making sure these are invalid inputs. So there is no defense against accidentally removing such conditions from the code (no regressions)

not all languages are like that, some of them are runtime checks and compile time warnings

guava: in java

Property based testing

random input generator which is restricted. No more repetability of tests (unless creating a manual test with the values that failed on the build server)