Pergunta

Onde você colocar os testes de unidade para eventos privados em classes C #?

Um na Wikipedia sugere:

  • Colocar testes na mesma classe como os membros que estão testando
  • Usando classes parciais

Pessoalmente, nenhum desses métodos parece adequado, e eu prefiro muito mais ter testes de unidade localizada em um projeto separado completamente.

Quaisquer pensamentos sobre isso?

(Eu sei que há uma quantidade justa de debate sobre se métodos privados devem ser testados em tudo. Eu gostaria de ouvir ambos os lados do argumento.)

Foi útil?

Solução

métodos privados não necessariamente precisa ser testada diretamente. Você pode determinar a sua validade com base em testes de métodos públicos que utilizam esses métodos privados.

No entanto, você deve tomar cuidado para garantir que seus métodos públicos podem dependências facilmente injetar simuladas em seus métodos particulares para facilitar os testes e simular todos os cenários razoáveis.

Editar: Como para onde seus outros testes devem ser localizados, eu sugiro um subdiretório separado dentro de seu projeto para lidar com seus testes. Ao escrever testes para aplicações PHP, eu tenho um testes diretório na raiz do meu projeto cuja estrutura de diretórios é idêntico ao da minha estrutura de diretório do aplicativo real. Nele, eu tenho uma classe de teste para cada classe real.

Apenas não compilar suas classes de teste com o resto do seu projeto ao liberar a produção (ou, no caso de uma linguagem interpretada também como PHP, não implantar as classes de teste para o servidor de produção).

Outras dicas

Não teste unidade de métodos privados. Os testes unitários são para testar a interface visível (de modo público e protegido) de uma classe. Os métodos privados são detalhes de implementação e testes de unidade de escrita para eles é desnecessário (o seu comportamento deve ser testado implicitamente pelos testes sobre os métodos visíveis), leva a testes frágeis (como os detalhes de implementação poderia mudar) e é uma barreira para refatoração.

Se você tem um método particular que você acha que precisa de teste de unidade, que é um grande indício de que talvez ele deve ser fatorados em um método público em outra classe.

Onde você colocar os testes de unidade para eventos privados em classes C #?

Em nenhum lugar. Eles não existem.

Em geral, os meus testes unitários estão em projetos separados.

Eu também gosto pessoalmente de ter testes de unidade em um projeto separado. Se você quiser teste de unidade de um método particular, você poderia fazer o método interno privado em seu lugar. Você pode então fazer métodos internos visíveis para os testes de unidade para chamar diretamente adicionando o seguinte para AssemblyInfo.cs:

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

Você deve fazer o que funciona para você; aqui está o que funciona para mim:

Meu unidade é uma classe : é isso que eu estou tentando teste. Não é um método. Eu estou tentando fazer programação orientada a objetos, então eu coloquei a minha atenção em objetos.

Se eu encontrar-me tentado a testar um método particular, eu preciso refactor . Eu só quero testar um método privado diretamente porque há muito outro código entre ele e os testes, e porque o método privado em si é bastante complexo para testes precisam de atenção. Então, eu vou geralmente Extrair Classe de puxar o método privado, e outros membros relacionados em uma nova classe.

As minhas aulas tendem a ser bastante pequena . Eles são fáceis de ler e compreender. Meus métodos, é claro, também são muito pequenas e fáceis de entender.

Fazendo a transição para esta forma de trabalho obrigava-me a repensar muitos dos meus pressupostos e hábitos sobre a programação. O que antes parecia radical agora parece banal.

Eu concordo que os métodos privados não devem ser testados, em geral, porque você só deve testar as interfaces públicas.

Dito isto, existem razões pelas quais você pode querer testar métodos privados:

  1. Você está usando TDD, e você tem que desenvolver um método particular complexa. Criação de métodos de ensaio para o método privado pode ser necessário para manter seu código de escrita teste-write -. Ciclo de teste na granularidade direito

  2. Você pode ser parte de uma equipe, onde outros podem precisar modificar o método privado, e você quer testes para garantir que as alterações não criar problemas.

Algumas soluções:

  1. Declare alguns métodos que são público que delegado para o método privado e são utilizados apenas para fins de teste. Estes poderiam ser, por exemplo, o prefixo com TestFoo1, TestFoo2 etc.

  2. Use interna

http://msdn.microsoft.com/ en-us / library / 7c5ka91b (VS.80) .aspx

A sua pergunta título e na primeira frase são diferentes. :)

Eu não tenho certeza sobre onde colocar seus testes. Isso dependeria de linguagem e C # não é algo que eu estou familiarizado com, mas eu imagino que uma parte substancial do seu código está dentro de métodos privados. Eu me sentiria desconfortável se que não foi testado. cobertura de código iria cair um pouco.

Nós usamos assessores particulares em Visual Studio para testar métodos privados. Isso significa que que as classes de teste podem viver em um projeto separado.

No entanto, tentamos realmente limitar o número de estes porque:

  • um método particular que pode estar sozinho pode ser puxado para fora como um método público em outra classe
  • métodos privados que não fazem nada de particularmente útil fora da classe podem ser testadas através dos métodos públicos dessa classe

absolutamente sim. métodos privados devem ser testados de qualquer maneira. e MbUnit framework de teste de unidade pode acessar membro privado.

ver este blog: testando métodos privados

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top