GContracts: Programming by Contract for Groovy