In brief: Contract Tests
Contract Tests explain how a class should extend a superclass or implement an interface, so that I don’t have to read a bunch of prose to figure out how to do that. Typically, a contract test case class is abstract/deferred/not fully implemented, then I extend/subclass it and implement a Factory method or two to return instances of my own implementation of the given interface. That gives me a standard battery of tests I can run to drive my implementation. It might not be perfect (I’d have n failing tests to start) but I prefer it to documentation written in prose.
So if you’re delivering something you want me to extend (like a framework) and I need to follow more than three rules, then please deliver some contract tests along with it.
Comments