Many times I am involved in the design/implementation of APIs I am facing this dilemma.
I am a very strong supporter of information hiding and try to use various techniq
SomethingThatExpectsMyInterface
can be tested outside Foo
, right? You can call its submit()
method with your own test class that implements MyInterface
. So that unit is taken care of. Now you are testing Foo.someMethod()
with that well-tested unit and your untested inner class. That's not ideal - but it's not too bad. As you test-drive someMethod()
, you are implicitly test-driving the inner class. I know that's not pure TDD, by some strict standards, but I would consider it sufficient. You're not writing a line of the inner class except to satisfy a failing test; that there's a single level of indirection between your test and the tested code doesn't constitute a big problem.