Colocamos todos os nossos testes de unidade em seus próprios projetos. Nós achamos que temos que tornar certas classes públicas em vez de internas apenas para os testes de unidade. Existe alguma maneira de evitar ter que fazer isso. Quais são as implicações de memória tornando as classes públicas em vez de seladas?
c#
unit-testing
scope
leora
fonte
fonte
Respostas:
Se você estiver usando o .NET, o atributo de montagem InternalsVisibleTo permitirá criar assemblies "amigos". Estes são assemblies específicos com nomes fortes que têm permissão para acessar classes internas e membros do outro assembly.
Observe que isso deve ser usado com discrição, pois une firmemente as montagens envolvidas. Um uso comum para InternalsVisibleTo é para projetos de teste de unidade. Provavelmente não é uma boa opção para uso em seus conjuntos de aplicativos reais, pelo motivo exposto acima.
Exemplo:
fonte
Se é uma classe interna, não deve ser usada isoladamente. Portanto, você realmente não deveria testá-lo além de testar alguma outra classe que faz uso desse objeto internamente.
Assim como você não deve testar membros particulares de uma classe, não deve testar classes internas de uma DLL. Essas classes são detalhes de implementação de alguma classe acessível ao público e, portanto, devem ser bem exercitadas através de outros testes de unidade.
A idéia é que você só quer testar o comportamento de uma classe, porque se você testar detalhes de implementação internos, seus testes serão frágeis. Você deve poder alterar os detalhes de implementação de qualquer classe sem interromper todos os seus testes.
Se você achar que realmente precisa testar essa classe, convém reexaminar por que essa classe é interna em primeiro lugar.
fonte
para fins de documentação
Como alternativa, você pode instanciar a classe interna usando o
Type.GetType
métodoexemplo
para o tipo genérico, existem processos diferentes como abaixo:
fonte
As aulas podem ser públicas e seladas.
Mas não faça isso.
Você pode criar uma ferramenta para refletir sobre classes internas e emitir uma nova classe que acessa tudo via reflexão. O MSTest faz isso.
Editar: quero dizer, se você não quiser incluir -qualquer coisa de teste em sua montagem original; isso também funciona se os membros forem privados.
fonte
public sealed class
? Qual é o seu raciocínio para essa jóia?