Atualmente, estou aprendendo sobre TDD e tentando colocá-lo em prática em meus projetos pessoais. Eu também usei extensivamente o controle de versão em muitos desses projetos. Estou interessado na interação dessas duas ferramentas em um fluxo de trabalho típico, especialmente quando se trata da máxima de manter pequenos compromissos. Aqui estão alguns exemplos que vêm à mente:
Inicio um novo projeto e escrevo um teste simples para criar uma classe ainda não existente. Devo confirmar o teste antes de escrever a classe, mesmo que o teste não seja compilado? Ou devo esboçar a quantidade mínima de código necessária para compilar o teste antes de confirmar?
Encontro um bug e escrevo um teste para recriá-lo. Devo confirmar o teste com falha ou implementar a correção de bug e depois confirmar?
Estes são os dois exemplos que vêm imediatamente à mente. Sinta-se à vontade para fornecer exemplos adicionais em sua resposta.
Editar:
Eu assumi nos dois exemplos que imediatamente após escrever o teste, escreverei o código para fazer o teste passar. Outra situação também pode surgir: eu trabalho em um projeto usando TDD por várias horas sem confirmar. Quando finalmente faço confirmações, quero dividir meu trabalho em pequenos pedaços. (O Git torna isso relativamente fácil, mesmo se você deseja confirmar apenas algumas das alterações em um único arquivo.)
Isso significa que minha pergunta é tanto sobre o que cometer quanto sobre quando cometer.