Pergunta

A minha pergunta é bastante relevante para perguntado antes mas eu preciso de alguns conselhos práticos.

Eu tenho "Trabalho eficazmente com código legado" em minhas mãos e eu estou usando o conselho do livro como eu lê-lo no projeto I 'm trabalhando. O projecto é uma aplicação C ++ que consiste em algumas bibliotecas, mas a maior parte do código é compilado para um único executável. I 'm usando googletest para adicionar testes de unidade para código existente quando eu tenho que tocar em algo.

O meu problema é como posso configurar meu processo de compilação para que eu possa construir os meus testes unitários uma vez que existem dois executáveis ??diferentes que precisam compartilhar código enquanto eu não sou capaz de extrair o código do meu aplicativo "em teste" para uma biblioteca . Agora eu fiz o meu processo de compilação para o aplicativo que detém os testes de unidade ligar contra os arquivos de objeto gerados a partir do processo de construção do aplicativo principal, mas eu realmente não gosto dele. Há alguma sugestão?

Foi útil?

Solução

Se seu aplicativo de teste só é vincular os arquivos objeto que necessita para teste, então você já está efetivamente tratá-los como uma biblioteca, deve ser possível agrupar esses arquivos objeto em uma biblioteca separada para o principal eo aplicativo de teste. Se você não puder, então eu não vejo que o que você está fazendo é muito ruim uma alternativa.

Se você está tendo para vincular outros arquivos objeto não sob teste, em seguida, que é um sinal de dependências que precisam ser quebrados, para o qual você tem o livro perfeito. Temos problemas semelhantes e usar um sistema como o sugerido por Vlion

Outras dicas

trabalhar efetivamente com Legacy Code é o melhor recurso para saber como iniciar testando código antigo. Há soluções realmente nenhuma curto prazo que não vai resultar em coisas piorando.

Eu vou esboçar uma estrutura makefile você pode usar:

all: tests executables

run-tests: tests
    <commands to run the test suite>

executables: <file list>
    <commands to build the files>

tests: unit-test1 unit-test2 etc

unit-test1: ,files that are required for your unit-test1>
    <commands to build unit-test1>

Isso é mais ou menos o que eu faço, como um único desenvolvedor no meu projeto

Eu, pessoalmente, iria continuar fazendo o que você está fazendo ou considerar ter um script de construção que faz com que o aplicativo de destino e os testes de unidade ao mesmo tempo (dois binários resultantes fora a mesma base de código). Sim, cheira bem, mas é muito prático.

Kudos para você e boa sorte com o seu teste.

Eu prefiro um executável de teste por teste. Isso permite costuras ligação em tempo e também ajuda a permitir que TDD como você pode trabalhar em uma unidade e não se preocupar com o resto do seu código.

eu faço as bibliotecas dependem de todos os testes. Esperemos que isto significa que seus testes só são executados quando o código realmente muda.

Se você receber uma falha nos testes vai interromper o processo de construção no lugar certo.

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