Então, eu tenho um módulo de autenticação que escrevi há algum tempo. Agora estou vendo os erros do meu caminho e escrevendo testes de unidade para ele. Enquanto escrevia testes de unidade, tenho dificuldade em encontrar bons nomes e boas áreas para testar. Por exemplo, eu tenho coisas como
- RequerLogin_should_redirect_when_not_logged_in
- RequerLogin_should_pass_through_when_logged_in
- Login_should_work_when_given_proper_credentials
Pessoalmente, acho que é um pouco feio, mesmo que pareça "adequado". Também tenho problemas para diferenciar os testes, apenas analisando-os (tenho que ler o nome do método pelo menos duas vezes para saber o que acabou de falhar)
Então, pensei que talvez, em vez de escrever testes que testam puramente a funcionalidade, talvez escreva um conjunto de testes que cubram cenários.
Por exemplo, este é um esboço de teste que eu criei:
public class Authentication_Bill
{
public void Bill_has_no_account()
{ //assert username "bill" not in UserStore
}
public void Bill_attempts_to_post_comment_but_is_redirected_to_login()
{ //Calls RequiredLogin and should redirect to login page
}
public void Bill_creates_account()
{ //pretend the login page doubled as registration and he made an account. Add the account here
}
public void Bill_logs_in_with_new_account()
{ //Login("bill", "password"). Assert not redirected to login page
}
public void Bill_can_now_post_comment()
{ //Calls RequiredLogin, but should not kill request or redirect to login page
}
}
Isso é ouvido de um padrão? Eu já vi histórias de aceitação e coisas assim, mas isso é fundamentalmente diferente. A grande diferença é que eu estou criando cenários para "forçar" os testes. Em vez de tentar manualmente criar possíveis interações que precisarei testar. Além disso, eu sei que isso incentiva testes de unidade que não testam exatamente um método e classe. Eu acho que isso está bem. Além disso, estou ciente de que isso causará problemas para pelo menos algumas estruturas de teste, pois elas geralmente assumem que os testes são independentes um do outro e a ordem não importa (onde seria neste caso).
Enfim, esse é um padrão aconselhável? Ou isso seria um ajuste perfeito para testes de integração da minha API, e não como testes "unitários"? Isso é apenas em um projeto pessoal, então estou aberto a experimentos que podem ou não correr bem.
_test
anexo e uso comentários para anotar os resultados esperados. Se for um projeto pessoal, encontre algum estilo com o qual se sinta confortável e cumpra-o.