Desenvolvimento orientado a teste com C simples: gerenciar vários módulos

5

Eu sou novo no desenvolvimento orientado a testes, mas estou amando isso. Há, no entanto, um problema principal que me impede de usá-lo efetivamente.

Eu trabalho para aplicações médicas incorporadas, simples C, com problemas de segurança.

Suponha que você tenha o módulo A que tem uma função A_function() que eu quero testar. Essa função chama uma função B_function , implementada no módulo B . Eu quero dissociar o módulo, assim como James Grenning ensina, eu crio um módulo Mock B que implementa uma versão simulada de B_function .

No entanto, chegou o dia em que tenho de implementar o módulo B com a versão real de B_function . É claro que os dois B_function não podem viver no mesmo executável, então eu não sei como ter um "lançador" único para testar os dois módulos.

A saída de James Grenning é substituir, no módulo A , a chamada para B_function com um ponteiro de função que pode ter o valor da função mock ou real de acordo com a necessidade. No entanto, trabalho em equipe, e não posso justificar essa decisão que não faria sentido se não fosse pelo teste, e ninguém me pediu explicitamente para usar uma abordagem orientada a testes.

Talvez a única saída seja gerar um executável diferente para cada módulo.

Alguma solução mais inteligente? Obrigado

    
por Angelo 02.09.2012 / 10:26
fonte

1 resposta

1

Com base no que você descreveu, sugiro que essa seja uma razão horrível para usar um ponteiro de função. Ele aumentará sua capacidade de depurar, analisar os core dumps e complicará o desenvolvimento / manutenção futuros. Os ponteiros de função têm o seu lugar, mas este não é um deles.

Acho que você está se aproximando do teste do ponto de vista errado. A_func depende da presença do B_func para que ele funcione. Portanto, você não pode realmente testar A sem ter a implementação real de B no lugar. Colocar um B_func simulado no local irá gerar apenas um conjunto limitado de testes para A_func. Por definição, você não pode exercitar totalmente A_func sem o B_func real no lugar.

Supondo que você não esteja lidando com uma série em cascata de inclusões de módulo, o conjunto de testes apropriado teria alguns testes para exercitar o B_func e, em seguida, alguns testes adicionais para exercitar as variações que o A_func pode passar. Entende-se que você pode ter alguma redundância entre os testes para B_func e o teste indireto de B_func de A_func, mas geralmente não é grande coisa.

    
por 03.09.2012 / 02:22
fonte

Tags