Vamos tornar tudo isso um pouco mais concreto com um exemplo. Então, digamos que você seja encarregado de criar um método que converta os números decimais em números romanos.
A execução do teste não é possível neste momento, porque a classe Romanizer ainda não existe e isso significa erros de compilação.
Adicione a classe Romanizer e dê-lhe um método FromDecimal que pega uma integer e retorna uma string.
Eu gosto de ter certeza de que o teste ainda falha quando o código é compilado. Dessa forma, sei que estou começando com um teste falhado como resultado de afirmações nos testes.
A criação de um algoritmo que possa funcionar é prematura nesta fase. Você pode acertá-lo, mas é mais provável que não o faça. E isso pode te colocar em problemas (veja mais abaixo).
Faça todos os testes para ver este falhar. Isto é muito importante! Ele permite que você tenha certeza de que é sua implementação que o fará passar e não a falta de afirmações em seu teste.
Esta estrutura if-else-if não é muito elegante, mas dois casos ainda não merecem ser refatorados, e assim por diante para o próximo teste.