testing private methods tdd and test driven refactoring