Teste de unidade refere-se ao que você está testando, ao TDD quando está testando.
Os dois são ortogonais.
Teste de Unidade significa, bem, testar unidades individuais de comportamento. Uma unidade individual de comportamento é a menor unidade possível de comportamento que pode ser testada individualmente isoladamente. (Eu sei que essas duas definições são circulares, mas parecem funcionar muito bem na prática.)
Você pode escrever testes de unidade antes de escrever seu código, depois de escrever ou enquanto escreve.
TDD significa (novamente, meio óbvio) permitir que seus testes conduzam seu desenvolvimento (e seu design). Você pode fazer isso com testes de unidade, testes funcionais e testes de aceitação. Geralmente, você usa os três.
A parte mais importante de TDD é o meio D . Você deixa os testes te guiarem . Os testes informam o que fazer, o que fazer a seguir, quando terminar. Eles dizem qual é a API, qual é o design. (Isso é importante: o TDD não se trata de escrever testes primeiro. Existem muitos projetos que escrevem testes primeiro, mas não praticam TDD. Escrever testes primeiro é simplesmente um pré-requisito para permitir que os testes conduzam o desenvolvimento.)
O teste de unidade é um componente do desenvolvimento orientado a testes
Você pode fazer testes de unidade sem fazer um desenvolvimento orientado a testes. No entanto, você não pode fazer o desenvolvimento orientado a testes sem usar testes de unidade.
Quando você faz o teste de unidade tradicional , você escreve o teste depois de escrever seu código.
A abordagem de desenvolvimento orientada a testes é escrever um teste de unidade antes de escrever um código.
As vantagens mais interessantes do TDD (IMHO) em comparação com o simples teste de unidade:
fonte
TDD e teste de unidade são dois termos muito específicos que geralmente são mal utilizados.
O TDD está escrevendo um teste que falhará, depois escrevendo a quantidade mínima de código necessária para executá-lo e refatorando o código para torná-lo limpo. Isso é feito em ciclos, reprovado -> aprovado -> refatorado, adicionando um novo teste para cada requisito conhecido do código. Mais recentemente, o TDD tornou-se ainda mais especificamente sobre a gravação de testes de unidade nesse ciclo, para distingui-lo do ATDD (um subconjunto do BDD), que está gravando testes de aceitação em um ciclo semelhante.
Teste de unidade é sobre testar um código em unidades pequenas e isoladas. A confusão comum aqui é pensar que, se você estiver usando uma ferramenta de teste de unidade, como xUnit ou Rspec, para executar testes que você está escrevendo testes de unidade. Isto não é necessariamente verdade. Essas ferramentas podem ser usadas para executar, digamos, testes usando a estrutura Selenium - nesse caso, você está escrevendo testes de aceitação usando um executor de teste de unidade. Os testes de unidade são testes muito específicos, focados em um pequeno pedaço de lógica, isolado de todo o resto por questões de velocidade (para que você possa executá-los frequentemente e obter feedback rápido sobre novos bugs).
fonte
TDD é a abordagem de escrever os casos de teste antes do desenvolvimento, como você disse e, em seguida, o desenvolvedor grava o código para passar nos casos de teste. Teste de unidade é um termo usado para descrever um tipo de teste de escopo restrito que não seja o teste do sistema, teste de integração e teste de aceitação.
fonte
TDD é uma abordagem filosófica para escrever código: escreva os testes primeiro. Os testes que você escreve são testes de unidade.
fonte
A maneira como separo os dois é considerar que o TDD tem menos a ver com testes e mais com o design do código. Os testes de unidade são então usados para definir as expectativas para o código final. Quando o código final é gravado e passa nos testes (especificações), você possui um código que foi projetado usando testes.
fonte
Todas excelentes respostas. Eu acrescentaria apenas que o teste de unidade tende a considerar a 'unidade' como um pequeno componente, enquanto o TDD se amplia para incluir testes de integração e aceitação.
(Algumas variantes do TDD consideram a 'unidade' como o menor passo incremental em direção à funcionalidade desejada ...)
fonte