Немножко не так это работает. Пишем пустой класс. Пишем первый тест, который разумеется fail. Пишем ПРОСТЕЙШУЮ имплементацию нужного метода в классе. Тест проходит. Пишем второй тест, который простейшая имплементация уже не проходит. Меняем имплементацию на чуть более сложную. И так до тех пор, пока удаётся придумать новые тесты (или их параметры), на которых текущая имплементация ломается. Как только это становится сложно придумать - значит имплементация достаточна, можно подчистить код, написать комменты где нужно и двигать дальше.Ljolja wrote:т.е. сразу делается fake substitute? иначе тест не пройдет компиляциюИнтеррапт wrote: Нет, ну можно конечно и так, но для себя я в таком подходе особых преймуществ не вижу. Прежде чем писать функцию, я как бы пытаюсь точно осмыслить - для чего мне нужна эта функция и что я ею решаю. Что на входе, что на выходе. Пишу это в виде теста, который сначала fail (red),здесь главное не переусердствовать все же имхо тест для функции, а не функция для теста, иначе она может работать только в ораниченном тестом случае, потом придется ТДД нарушить и дописать тест/ы для реального разнообразия жизненных ситуацийИнтеррапт wrote:а потом уже добавляю имплементацию, которая удовлетворит моим условиям (green).
Если у нашего класса есть collaborators, то мы их мокаем при помощи готового фреймворка, врукопашную разумеется не пишем...