Zgodnie z TDD powinieneś najpierw napisać test, nawet jeśli funkcja/metoda nie istnieje. Test powinien sfailować, co pozwoli Ci wykluczyć przypadek, że test przechodzi zawsze (czyli przypadek, gdy jest on niepoprawnie zaimplementowany). W następnym kroku tworzysz kod, który powinien ten test przejść.
W dalszych krokach wymyślasz coraz trudniejsze przypadki, np. corner case'y i wsadzasz je do testu. Test failuje, poprawiasz kod. Nigdy na odwrót*. Chodzi o to, byś podczas tworzeniu kodu nie dopasowywał testu do czego, co już zaimplementowałeś.
* W praktyce zdarza się, że unit testy powstają na koniec, gdy kod jest już gotowy ;)