Como você implementar unidade de testes em projetos de grande escala C ++? [fechadas]

StackOverflow https://stackoverflow.com/questions/91683

  •  01-07-2019
  •  | 
  •  

Pergunta

Eu acredito fortemente na utilização da unidade-testes como parte da construção de aplicações multi-plataforma de grande porte. Atualmente, está pensando em ter nossa unidade-testes dentro de um projeto separado. Isto tem a vantagem de manter a nossa base de código limpo. Penso, no entanto, que isso iria separar o código de teste a partir da implantação da unidade. O que você acha desta abordagem e existem quaisquer ferramentas como JUnit para aplicações c ++?

Foi útil?

Solução

Existem muitas frameforks Unidade de Teste para C ++. CppUnit certamente não é o que eu iria escolher (pelo menos na sua versão 1.x estável, uma vez que carece de muitos testes, e requer uma grande quantidade de linhas redundantes de códigos). Até agora, o meu quadro preferido é CxxTest , e eu pensando em avaliar Frutose algum dia.

De qualquer forma, existem algumas "papéis" que avaliam estruturas C ++ TU:

Outras dicas

Essa é uma abordagem razoável.

Eu tive resultados muito bons tanto com UnitTest ++ e Boost.Test

Eu olhei CppUnit, mas para mim, me senti mais como uma tradução do material JUnit do que algo destinado a C ++.

Atualização: Estes dias eu prefiro usar Captura . Eu achei que fosse eficaz e simples de usar.

Você deve separar seu código base para uma biblioteca compartilhada (dinâmico) e, em seguida, escrever a maior parte dos seus testes de unidade para esta biblioteca.

Dois anos atrás (2008) Tenho estado envolvido em grande LSB projeto de infra-estrutura implantada pela Fundação Linux. Um dos objectivos deste projecto era escrever testes de unidade para 40.000 funções das bibliotecas do núcleo do Linux. No âmbito deste projecto, que criou a AZOV tecnologia e a ferramenta básica denominada API Sanity Autoteste , a fim de gerar automaticamente todos os testes. Você pode tentar usar essa ferramenta para gerar testes de unidade para a sua biblioteca de base (s).

Eu uso UnitTest ++. Os testes estão em um projeto separado, mas os testes reais estão interligados com o código real. Eles existem em uma pasta sob a seção em teste. ou seja:
MyProject \ src \ <- fonte do aplicativo real
MyProject \ src \ testes <- a fonte dos testes
Se você tiver pastas aninhadas (e quem não), então eles também terão o seu próprio \ testes subdiretório.

cppunit é um equivalente directo da Junit para aplicações C ++ http://cppunit.sourceforge.net/cppunit-wiki

Pessoalmente, eu criei os testes de unidade em um projeto diferente, e criou uma configuração de compilação separada, que construiu todos os testes de unidade e código fonte dependente. Em alguns casos eu queria testar FunctionsS membro particular de uma classe, então eu fiz a classe Teste um amigo de classe para o objeto a ser testado, mas escondeu as declarações amigo quando a construção em configurações "não-teste" através de declarações de pré-processamento.

eu acabei fazendo essas ginástica codificação como eu estava integrando testes em código legado no entanto. Se você está começando com o propósito de unidade testar um projeto melhor pode ser simples.

Você pode criar um projeto de teste de unidade para cada biblioteca em sua árvore fonte em um subdiretório do que biblioteca. Você acaba com uma aplicação piloto de testes para cada biblioteca, o que torna mais fácil para executar um único conjunto de testes. Colocando-os em um subdiretório, ele mantém o seu limpo base de código, mas também mantém os testes de perto o código.

Os scripts podem facilmente ser escrito para rodar todos os conjuntos de testes em sua árvore fonte e recolher os resultados.

Estou usando uma versão personalizada do CppUnit original para anos com grande sucesso, mas existem outras alternativas agora. GoogleTest parece interessante.

Eu acho que o seu no caminho certo com o teste de unidade e um ótimo plano para melhorar a confiabilidade do seu produto.

testes unitários Embora não vai resolver todos os seus problemas ao converter seu aplicativo para diferentes plataformas ou mesmo diferentes sistemas operacionais. A razão para isso, é os testes unitários processo atravessa a bugs descobrir na sua aplicação. Ele simplesmente joga como muitas entradas imagináveis ??em seu sistema e aguarda resultado do outro lado. É como a obtenção de um macaco para constantemente libra no teclado e observando os resultados (beta testers).

Para levá-lo para a próxima etapa, com boa unidade de teste que você precisa se concentrar em seu design interno de sua aplicação. A melhor abordagem que eu encontrei foi usar um processo padrão de design ou desenho chamado "programação contrato" ou "Design by contrato". O outro livro que é muito útil para a construção de confiabilidade em seu projeto do núcleo era.

depuração do processo de desenvolvimento:. Estratégias práticas para ficar focado, Bater as datas de envio e Construindo Equipes Sólidos

Em nossa equipe de desenvolvimento, nós olhamos muito de perto o que nós consideramos ser um erro do programador, erro desenvolvedor, erro de projeto e como poderíamos usar tanto a unidade de teste e também a construção de confiabilidade em nosso pacote de software através da DBC e seguindo o conselho de a depuração do proccess desenvolvimento.

Usando tut http://tut-framework.sourceforge.net/ muito simples, basta arquivo de cabeçalho apenas há macros. Pode gerar resultados XML

CxxTest também é olhar um valor para peso leve, fácil de usar multi-plataforma JUnit / CppUnit / xUnit- como estrutura para C ++. Achamos que é muito simples de adicionar e desenvolver testes

Aeryn é outra pena C ++ Testing Framework olhando

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