>> Java has all methods virtual and testing could be done without requiring the interface.
Not sure what you mean by that. I thought that interface/implementation divide is the way to implement virtual calls. Unless you want testing frameworks to do bytecode instrumentation.