Contract programming and unit tests