Простое создание тестового проекта и написание некоторых тестовых методов - это своего рода TDD, но, по моему опыту, это мало поможет, если вы не работаете над библиотекой, в которой есть известный API и вызовы методов напрямую соответствуют тому, что ожидает пользователь , Вам нужно составить правильный список тестов и для нетривиального приложения, которое может быть действительно трудным.
Я рекомендую попробовать SpecFlow - он продолжает определять тесты, хорошо отделенные от реализации, а структура файлов функций заставляет вас задуматься о том, что вы на самом деле тестируете.
Когда вы определяете функцию, вы просто пишете что-то вроде
When a user is saved
Then the user should exist
Поскольку в данный момент вы не находитесь в файле кода, у вас нет соблазна подумать о деталях реализации, например, какой метод вызывается для создания пользователя или даже в каком классе он реализован. Вы можете использовать теги для выбора различных реализаций, поэтому на этом уровне не имеет значения, означает ли пользователь сохранение вызова CreateUser или открытие браузера и отправка формы.
Как только вы определили функции, все тесты будут сгенерированы и начнут проходить, когда вы реализуете определения шагов и реальный код приложения, который тестируется.
Для простого приложения вы можете просто создать файлы объектов, но для чего-то более сложного полезно заранее составить более полную спецификацию. Для этого я использую iPad-приложение, но вы можете использовать любой инструмент, который вам удобнее всего.
Начните со списка функций высокого уровня, таких как «Регистрация пользователя». Они, как правило, слишком широки для непосредственного написания тестов, поэтому разбейте их на подфункции, которые могут быть четко определены и обычно сопоставлены с определенным действием пользователя, таким как «Сохранить пользователя» или «Просмотреть существующего пользователя».
Каждой из этих подфункций потребуется список сценариев, которые в совокупности полностью определяют, работает ли функция, например, «Можно сохранить действительного пользователя» и «Не удается сохранить пользователя с повторяющимся именем пользователя».
При построении этого списка, как правило, становится ясно, где должна быть изменена структура - если вы не можете придумать какие-либо тесты сценария для функции или у вас слишком много элементов в одной функции, тогда эта функция, вероятно, определена в неправильный уровень и должен быть разделен или изменен.