Pergunta

Estou tentando melhorar o teste de unidade do meu código, mas no momento estou escrevendo muito código que lida com sistemas remotos.SNMP, WMI, esse tipo de coisa.Com a maioria das classes, posso simular objetos para testá-los, mas como lidar com testes unitários de um sistema real?Por exemplo, se minha classe sair e obtiver o objeto Win32_LogicalDisk para um servidor, como eu poderia fazer um teste de unidade?

Foi útil?

Solução

Supondo que você quis dizer "Como faço para testar coisas que são difíceis/impossíveis de zombar":

Se você tem uma classe que "sai e obtém o objeto Win32_LogicalDisk para um servidor" E faz outra coisa (consome o objeto 'Win32_LogicalDisk' de alguma forma), supondo que você deseja testar as partes da classe que consomem esse objeto, você pode usar Injeção de dependência para permitir que você simule o objeto 'Win32_LogicalDisk'.Por exemplo:

class LogicalDiskConsumer(object):

    def __init__(self, arg1, arg2, LogicalDiskFactory)
        self.arg1=arg1
        self.arg2=arg2
        self.LogicalDisk=LogicalDiskFactory()

    def consumedisk(self):
        self.LogicalDisk.someaction()

Em seguida, em seu código de teste de unidade, passe um 'LogicalDiskFactory' que retorna um objeto simulado para o 'Win32_LogicalDisk'.

Outras dicas

A maneira mais fácil de testar coisas que são difíceis de simular é refatorar o código de forma que seu código (lógica que vale a pena testar) esteja em um só lugar e outras coisas que seu código usa estejam em módulos separados.O módulo é fácil de simular e dessa forma você pode focar na sua lógica de negócios.

Você pode criar um conjunto de "stubs de teste" que substituam as rotinas da biblioteca principal e retornem valores conhecidos, talvez após atrasos adequados.

Por exemplo, recentemente precisei desenvolver código para rodar dentro de um produto de terceiros.O desafio era que nosso “parceiro” fizesse a compilação e integração com seu código base:Eu não tinha permissão para Olhe para seu código em qualquer formato!Minha estratégia foi construir um emulador muito simples que fizesse o que eu pensamento seu código sim, com base nas informações de seus engenheiros.Usamos uma linguagem que facilitou a entrada e saída de várias partes do emulador em cada compilação, para que eu pudesse fazer uma quantidade enorme de testes antes de envolver nosso parceiro na construção de cada nova iteração.

Eu usaria o mesmo método novamente, já que os problemas de software nesse produto específico são cerca de uma ordem de magnitude menor do que em nosso próximo produto mais confiável!

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