Entendo principalmente a teoria do TDD, mas não consigo descobrir como começar. Sento-me para escrever um teste de unidade para um projeto pessoal e percebo. . . Não tenho ideia do que estou testando. Quais objetos, que funcionalidade etc.
Por exemplo, digamos que eu queira escrever um aplicativo para ajudar nossa família a gerenciar tarefas de tarefas. Aqui estão algumas perguntas em minha mente: Como faço para passar dessa ideia para o meu primeiro teste? Quanto deve ser decidido antes de começar e quanto descubro depois de começar a escrever testes? Quando tomo decisões como armazenar dados em um arquivo de texto ou em um banco de dados? Devo ter testes de aceitação do usuário antes de começar? Devo ter a interface do usuário projetada? Devo ter uma especificação? (Eu percebo que pelo menos algumas dessas perguntas de exemplo provavelmente estão em uma "área cinza").
Além da pergunta do título sobre como chegar ao primeiro teste de unidade, você também pode dar um exemplo de como seria o primeiro teste de unidade para um projeto como o exemplo de projeto?
Respostas:
Eu gosto de começar com uma lista de recursos e, para cada recurso, escreva as histórias do usuário e, em seguida, para cada história escreva descrições de teste.
Pense um pouco no design, escolha uma descrição de teste e comece a codificar: refator verde-vermelho.
Repita até que todos os testes passem.
Sim, os testes de aceitação devem ser considerados como parte disso, anexados à história apropriada.
fonte
Você descobriu como o TDD é sobre o design desde o início. Antes de escrever seu primeiro teste, você precisa pensar sobre qual será seu primeiro bit de funcionalidade e como seria seu programa se essa funcionalidade estivesse funcionando.
Os desenvolvedores que não usam o TDD também precisam pensar nisso - mas podem "simplesmente mergulhar" e começar a escrever algo, qualquer coisa. Mas "alguma coisa, qualquer coisa" nem sempre está no caminho de entregar o programa que você pensou que estava planejando escrever. O que é? Bem, como seria seu programa se estivesse funcionando? Que testes passaria?
Legal. Se esse aplicativo estivesse funcionando, o que faria? Bem, uma tarefa provavelmente poderia ser atribuída a uma pessoa, certo?
Há um começo. Não é o lugar que você precisa começar, nem necessariamente o melhor lugar para começar - mas é um lugar. É algo que você deseja que seu código suporte (embora eu tenha certeza de que pode criar nomes melhores). Comece por aí, observe isso falhar. Faça passar. Limpe. Espuma, enxágüe, repita.
fonte
Sim, o TDD tem esse problema. É por isso que agora recomendo o Desenvolvimento Orientado a Comportamentos.
Comece manualmente. Anote algo semelhante a uma história de usuário:
Agora, quais são os recursos que suportam esse objetivo (a parte 'So that')?
Tudo isso é possível e deve ser verificado manualmente.
Faça isso por um tempo. Então, como um bom desenvolvedor, comece a procurar maneiras de automatizar peças redundantes. Isso varia dependendo da sua plataforma, mas a maioria possui estruturas decentes disponíveis.
O .Net tem WatiN para automatizar a página da Web ou, se você quiser testar uma API, eu recomendaria a adição do Subspec ao xUnit ou MSpec (você também pode fazer isso com qualquer estrutura de teste, apenas essas tornam mais fácil nomear seus testes de uma maneira que apóie esse estilo de pensamento).
Ruby possui pepino para testes de automação e rspec para testes de API de nível inferior
Javascript tem jasmim e qUnit.
ponto ponto Ponto
fonte
Divida seu aplicativo em histórias pequenas. ("Como usuário, quero clicar duas vezes em um ícone e iniciar o programa." Ou "Como usuário, quero abrir meu navegador e acessar o programa." Tanto faz.)
Depois, divida a história em algumas tarefas. (por exemplo, crie um projeto no Eclipse, configure um repositório de código) Quando você chegar a uma tarefa de codificação, escreva seu primeiro teste.
Se não tiver certeza, escolha qual delas parecer mais simples e faça isso. (provavelmente o arquivo de texto) Se você perceber que cometeu um erro, refatore. Se seus testes forem bem estruturados, você poderá fazer alterações no back-end e capturar efeitos colaterais indesejados que surgem.
fonte
Estou surpreso que nenhuma das respostas contenha a coisa real que você faz antes de escrever seu primeiro teste, que é criar uma lista de testes . Uma lista de testes é informada pelas fases de redação e design da história mencionadas em outras respostas e é o precursor direto da redação de um teste que você parece estar procurando.
Para obter mais informações sobre TDD, eu recomendaria o Test Driven Development By Example de Kent Beck. Ele também tem um screencast TDD que segue o desenvolvimento de uma biblioteca não trivial em um estilo TDD puro, com explicações de Kent em todas as etapas do processo. Eu acho que é um ótimo exemplo de TDD na prática, mesmo que seja (por necessidade) feito em um ambiente artificial.
fonte
Antes do primeiro teste de unidade, você pensa sobre o que deseja que aconteça e, em seguida, pensa em como testaria isso. Em seguida, escreva esse teste, veja se ele falha e implemente algum código para fazê-lo passar.
Enxágüe, repita, etc.
Para mim, é importante pensar em como você testaria isso, e é isso que pode impulsionar seu design.
fonte