Describir: Testing object-oriented programs in an object-oriented manner