Unit testando código privado [duplicado]
Esta pergunta já tem uma resposta aqui:
Unit testando métodos privados em C # 9 respostasAtualmente, estou envolvido no desenvolvimento com C # - Aqui estão alguns antecedentes: Implementamos o MVP com nosso aplicativo cliente e temos uma regra ciclomática que afirma que nenhum método deve ter uma complexidade ciclomática maior que 5. Isso leva a muitas pequenas empresas privadas. métodos geralmente responsáveis por uma coisa.
Minha pergunta é sobre o teste de unidade de uma classe:
Testar a implementação privada por meio de métodos públicos é bom ... Não tenho problema em implementar iss
Mas ... e os seguintes casos:
Exemplo 1 Lidar com o resultado de uma solicitação de recuperação de dados assíncrona (o método de retorno de chamada não deve ser público apenas para test
Exemplo 2.m manipulador de eventos que realiza uma operação (como atualizar o texto de um rótulo View - exemplo bobo, eu sei ..
Exemplo 3. Você está usando uma estrutura de terceiros que permite estender substituindo métodos virtuais protegidos (o caminho dos métodos públicos para esses métodos virtuais geralmente é tratado como programação de caixa preta e terá todos os tipos de dependências fornecidas pela estrutura. não quero saber sobre)
Os exemplos acima não me parecem o resultado de um design deficiente. Eles também não parecem ser candidatos a passar para uma classe separada para testes isolados, pois esses métodos perderão seu context
Alguém tem alguma opinião sobre isso?
Cheers, Jason
EDITAR Acho que não fui suficientemente claro na minha pergunta original - posso testar métodos particulares usando acessadores e zombar de chamadas / métodos usando o TypeMock. Esse não é o problema. O problema é testar coisas que não precisam ser públicas ou não podem ser pública
Eu não quero tornar o código público para fins de teste, pois ele pode introduzir brechas de segurança (publicar apenas uma interface para ocultar isso não é uma opção, porque qualquer pessoa pode simplesmente converter o objeto de volta ao seu tipo original e obter acesso a coisas Eu não gostaria que eles fizessem)
código @ que é refatorado para outra classe para teste é bom - mas pode perder o contexto. Eu sempre achei uma prática ruim ter classes 'auxiliares' que podem conter um pote de código sem contexto específico - (pensando em SRP aqui). Realmente não acho que isso funcione para os manipuladores de evento
Estou feliz por ter provado que está errado - não sei como testar essa funcionalidade! Sempre pensei que, se puder quebrar ou mudar, teste-o.
Cheers, Jason