Хорошие вопросы.Вот мои два цента, основанные на моем личном опыте:
Может ли использование TDD оставить вас открытым для непреднамеренных побочных эффектов вашей реализации?
Да, так и есть.TDD не является «полноценным» вариантом.Его следует использовать вместе с другими техниками, и вам обязательно следует иметь в виду общую картину (независимо от того, несете вы за это ответственность или нет).
Я имею в виду объекты, которые содержат или зависят отсостояние (например, значения внутреннего поля).Если у вас есть тесты, которые создают экземпляр изолированного объекта, инициализируют этот объект, а затем вызывают тестируемый метод, как вы заметите, что другой метод оставил недопустимое состояние, которое может отрицательно повлиять на поведение первого метода?Если я правильно понял вопросы, вы не должны полагаться на порядок выполнения теста.
Каждый метод теста должен выполняться независимо от того, что было выполнено до или будет выполнено после.Если это не так, то что-то не так (с точки зрения TDD).
Говоря о своем примере, когда вы пишете тест, вы должны знать с достаточной детализацией, какие будут ваши входные данные и каковы ожидаемые результаты.выходы.Вы начинаете с определенного входа, в определенном состоянии, и вы проверяете желаемый выход.Вы не гарантированы на 100%, что тот же метод в другом состоянии выполнит свою работу без ошибок.Однако «неожиданное» должно быть сведено к минимуму.
Если вы разрабатываете класс, вы должны точно знать, могут ли два метода изменить некоторое общее внутреннее состояние и как;и что более важно, если это должно действительно произойти вообще, или если есть проблема с низкой когезией.
В любом случае, хороший дизайн на уровне "tdd" не обязательно означает, чтоВаше программное обеспечение хорошо построено, вам нужно больше, как хорошо объясняет здесь дядя Боб:
http://blog.objectmentor.com/articles/2007/10/17/tdd-with-acceptance-tests-and-unit-tests
Мартин Фаулер написал интересную статью о тесте Mocks vs Stubs, которая охватывает некоторые темы, которые выговорить о:
http://martinfowler.com/articles/mocksArentStubs.html#ClassicalAndMockistTesting