Testes de unidade automatizados-porquê? Que é? qual?

sou um desenvolvedor C# winforms com uma experiência de cerca de um ano. O único teste de unidade que tenho feito até agora foi manual. Tenho pensado em seguir por algum tempo:

    Porque precisamos de uma unidade automatizada? teste? Quão eficaz é? Se eu quiser começar a fazer teste de unidade. Por onde devo começar? de onde? (ouvi falar de nunit) Preciso de ter alguma coisa em mente? ao desenhar as minhas aulas para facilitar a unidade automatizada teste?
  • O C# tem um suporte incorporado para testes de unidade automatizados?
  • Também podemos testar GUI com GUI automatizado? testes unitários ou são apenas negócios lógica? Já ouvi falar de esquemas de troça. Também são para testes unitários?
Author: Sandbox, 2009-08-22

6 answers

Por que precisamos de testes automáticos? Quão eficaz é?

O teste de unidade automatizado é muito valioso em primeiro lugar porque é automatável (normalmente, só o consideramos um 'teste de unidade' quando é automatável). À medida que o tamanho de uma aplicação cresce, testar manualmente toda a aplicação pode levar horas ou mesmo semanas. Mesmo testando apenas uma pequena parte de uma aplicação leva tempo e é propenso a erros. A menos que você seja autista, você não será capaz para se concentrar em executar cada teste manual 100% corretamente se você tem que fazer isso várias e várias dezenas de vezes.

Em Desenvolvimento Ágil, operamos com o conceito de Feedback rápido: quanto mais cedo você pode obter feedback sobre o que você fez foi certo ou errado, mais eficaz você pode ser. Todos cometemos erros, mas é muito menos caro descobrir e corrigir um erro trinta segundos depois de ter sido cometido, do que vários dias ou semanas depois. É por isso que os testes automatizados são tão importante.

Enquanto você pode fazer testes automáticos em muitos níveis, o teste de unidade é o tipo mais eficiente de implementar. Pode ser a disciplina de teste mais difícil de entender e dominar, mas é muito mais robusta do que qualquer outro tipo de teste.

Se eu quiser começar a fazer testes de unidade automatizados. Por onde devo começar? ouvi falar de nunit)

Em primeiro lugar, precisa de aprender algumas noções básicas de teste de unidade. O livro de Roy Osherove a arte da unidade O teste é uma boa introdução. No que diz respeito aos quadros, NUnit já existe há muito tempo, mas tem algumas questões inerentes. Se já tem um Visual Studio profissional ou um sistema de Equipa, há um sistema integrado de testes de unidade conhecido como MSTest. A maioria das pessoas não gosta deste quadro, mas, pessoalmente, acho-o bastante adequado. A integração IDE funciona bem, mas a API poderia ser melhor.

Se está à procura de um teste de unidade livre e de código aberto framework, I would recommend xUnit.net , que é um quadro muito mais moderno.

Preciso de ter alguma coisa em mente ao desenhar as minhas aulas para facilitar os testes automáticos?

SIM, cada classe deve poder ser utilizada isoladamente. Isto pode ser muito difícil de fazer com o design frontal, ou se você está tentando retrofitar testes de unidade para o código existente, mas deve vir mais ou menos naturalmente se você adotar Desenvolvimento Orientado por teste (TDD).

C# tem um suporte incorporado para testes de unidade automatizados?

Não, C# é apenas uma língua, mas como mencionei acima, certas versões do Visual Studio tem MSTest.

Podemos também Testar GUI com testes de unidade automatizados ou é apenas lógica de negócios?

A interface de teste da unidade tende a ser muito frágil (isto é, a manutenção do teste é muito alta), por isso geralmente não é uma boa ideia.

No entanto, existem muitos padrões de design que podem ajudá - lo a extrair toda a lógica da interface em classes testáveis: Modev-View-Controller, Model-View-Presenter, Application Controller, Model-View-View, etc.

Você pode realizar testes automáticos de uma aplicação inteira através dessas interfaces, contornando apenas a parte de renderização GUI. Esses testes são chamados testes subcutâneos, mas são considerados testes de Integração, Não testes unitários.

Ouvi falar de escárnio. Também são para testes unitários?

As bibliotecas dinâmicas mock são apenas para a unidade teste.

Alguns bons e populares são ...
 64
Author: Mark Seemann, 2017-11-30 20:03:47
    Porque precisamos de uma unidade automatizada? teste? Quão eficaz é?
Para isolar partes de um programa e mostrar que estão "correctas". Eles são um contrato, se você quiser de como o código é suposto funcionar. Com isso na mão eles podem dizer-lhe rapidamente e muitas vezes se o código está agindo corretamente. Os testes unitários permitem aos programadores alterar o código mais facilmente, com mais confiança e menos efeitos secundários. Promove / permite refactoring de código que sem testes unitários pode sê perigoso. Com tudo isto em mente, acho que o teste de unidade tornará o seu código melhor. Acho-os eficazes, mas admito que isto faz parte da curva de aprendizagem. Até que você se tornar realmente bom nisso (e eu ainda sou um novato em minha mente) você muitas vezes vai perder as coisas, mas eu descobri que ainda é muito melhor do que o teste manual que eu fiz por muito tempo. Encontrei benefícios quase instantâneos nos testes unitários. No meu primeiro projecto com ele descobri que estava a poupar uma grande quantidade de tempo desde que eu não tinha que testar manualmente tanto e eu estava realmente agradavelmente surpreso mais de uma vez quando o código que eu estava trabalhando em testes causou a falha em outros lugares que eu nem sequer tinha pensado para fazer o teste manualmente.
    Se eu quiser começar a fazer teste de unidade. Por onde devo começar? de onde? (ouvi falar de nunit)

Nunit é bom, MbUnit é bom. Para começar, ler e fazer os exercícios nas leituras. Websites e blogues sobre testes unitários, ensaios desenvolvimento (TDD) e Refactoring. O Object Mentor tem uma bela série sobre o TDD. Depois, a dada altura, escolhe um código que tenhas e tenta.

Livros eu sugiro - Test Driven Development by example, Test Driven Development, A practical guide, The Art of Unit Testing, Refactoring (Martin Fowler), Refactoring Workbook, Refactoring to patterns, Clean Code, and I am sure there are others. Tenho livros de refactoração na lista porque encontrei as técnicas para refactorar a mão. mão com teste de unidade.
    Preciso de ter alguma coisa em mente? ao desenhar as minhas aulas para facilitar os testes automáticos das unidades?
Muitos dos livros que mencionei discutirão isso. A resposta é sim e não. Muitas vezes uma classe melhor projetada que tem menos dependências é mais fácil de testar. Este é apenas um bom design, mas acontece para tornar os testes mais fáceis. Há um pouco de debate sobre se você deve alterar o código apenas para torná-lo mais testável. Inclino-me para ti. Em este ponto para mim, meu código no passado não incorporou um monte de "bom design" idéias, então para mim embarcando nesta jornada TDD está aumentando minha consciência e nível de bom design em meu código que é em parte para querer fazer TDD.
  • O C# tem um suporte incorporado para testes de unidade automatizados?

Se você tem VS 2008 Pro, sim, ou sistema de equipe, mas naturalmente eu assumo que você não.

    Também podemos testar GUI com GUI automatizado? teste de unidade ou é apenas negocio lógica?
Sim, há várias ferramentas lá fora. O Watin vem-me à cabeça.
    Já ouvi falar de esquemas de troça. Também são para testes unitários?
Sim. Eles permitem simular / testar objectos muito complexos que não se pode facilmente fazer um teste de unidade. Na minha viagem pelo caminho da TDD, ignorei propositadamente a troça no início. Para mim, eu queria ter um pouco de uma melhor compreensão de por que eles são necessários e como eles seria usado vivendo sem ele e vendo por mim mesmo como eu codificava onde eu ficaria preso com as técnicas tradicionais TDD. Outro livro que encontrei de grande utilidade, embora me magoe o cérebro Ler, está a trabalhar eficazmente com o código legado. Mostra como um código aparentemente inocente para os não treinados pode tornar a vida muito difícil.
 8
Author: klabranche, 2016-10-13 10:33:22
([1]}ponto 1) dá-lhe uma visão geral contínua do que está a funcionar e do que não funciona. Assim que você muda uma função simples você tem o resultado se esta mudança quebrar alguma coisa. Além disso, você pode mais tarde em refactor toda a sua aplicação e, na medida em que o seu teste de unidade estão todos indo verde, tudo funciona bem. Apenas este ponto é muito importante. Ou alguma vez fez um projecto que nunca teve de ser refactorado? ([1]}ponto 2) NUnit é um bom lugar para começar, mas há vários outros quadros de ensaio unitários. Também sugiro ter uma olhada no CruiseControl ou outras ferramentas de integração contínua que tiram muito trabalho do desenvolvedor. Bem, há pessoas certas que te podem dizer horas e horas o que fazer e o que não fazer. Quanto ao fundo do meu teste de unidade é limitado para usá-lo para dispositivos embarcados, temos outras dificuldades.

O ponto 4) C# é uma linguagem de programação, não um quadro de testes. .Net tem pelo menos um atributo que pode ajudar durante os testes unitários, este é o atributo Internalvisibleto para tornar públicas suas classes e métodos internos para um tipo spezific.

Ponto 5) Se tem uma aplicação bem concebida, não tem de testar a sua interface gráfica. Pensa nisto: a tua gui não tem código. Cada botão que um usuário pode pressionar é mapeado para controlador. Cada entrada que um usuário pode fornecer é entregue ao controlador. Então, o que tens para testar na tua gui? Tudo que você tem que fazer é fazer o seu controle testado e trabalhar bem. E com este MVVM / MVC / Whatelsearch tem, por um lado, uma aplicação bem projetada e, por outro lado, uma aplicação que é simples de testar.

 6
Author: PVitt, 2009-08-22 14:47:36
    Porque precisamos de uma unidade automatizada? teste? Quão eficaz é?
Muito.
  • Se eu quiser começar a fazer automatizado teste de unidade. Por onde devo começar? de onde? (ter ouvido sobre nunit) Comece com nunit-é muito fácil

  • Preciso de ter alguma coisa em mente ao desenhar as minhas aulas para facilitar os testes automáticos das unidades? Se fores bom no teste de unidade, vais querer fazê-lo.

  • O C# tem um suporte incorporado para testes de unidade automatizados? Não, mas o Visual studio Sim, mas não recomendo usá-lo.

  • Também podemos testar GUI com testes unitários ou são apenas negócios lógica? Qualquer coisa pode ser automatizada, é apenas uma questão de como é difícil de fazer.

  • Ouvi falar de escárnio. Também são para testes unitários? Sim.

Leia Roy Osherove é a arte de testar a unidade.

 5
Author: Preet Sangha, 2009-08-22 14:42:28

O porquê para testes de unidade automatizados é simples: porque à medida que o seu código cresce, vai levar cada vez mais tempo a fazer testes manuais, o que significa que é cada vez menos provável que o faça.

Automatizando os testes, torna-se conveniente executá-los, para que sejam executados.
 2
Author: Ned Batchelder, 2009-08-22 14:41:40
Why do we need to have automated unit testing? How effective is it?
  • Cabe-te a ti decidir se queres ou não. Só será tão eficaz como tu. Você deve ir para a automação apenas se você vai repetir o ciclo de testes para um pedaço de código mais de 3 vezes!!! Se eu quiser começar a fazer testes de unidade automatizados. Por onde devo começar? ouvi falar de nunit)

  • O que quer que se sinta confortável, faça-o o seu ponto de partida e, em seguida, explorá-lo e usá-lo para sua vantagem. Também podemos testar GUI com testes de unidade automatizados ou é apenas lógica de negócios?

  • Podes, mas não deves. A interface gráfica é melhor testada manualmente. Os olhos vão pegar mais erros na interface do que uma máquina vai. Ouvi falar de escárnio. Também são para testes unitários?

  • Sim a maioria dos frameworks como TestNG, Junit etc são para testes unitários.

 2
Author: Milin Patel, 2014-07-17 11:32:33