Pergunta

Estou desenvolvendo um aplicativo GUI no QT Creator e quero escrever alguns testes de unidade para ele.

eu segui Este guia Para fazer alguns testes de unidade com o QTTestlib e o programa compila bem. Mas como eu os administro? Eu gostaria que eles fossem executados antes do início do aplicativo GUI se depurar e não for executado se a criação de liberação.

Foi útil?

Solução 3

Finalmente descobri como executar testes antes de iniciar o aplicativo.

Eu adicionei um método estático na classe de testes para executar os testes:

#include <QtTest/QtTest>

TestClass::runTests()
{
    TestClass * test = new TestClass();

    QTest::qExec(test);
    delete test;
}

Na função principal, faça:

int main(int argv, char *args[])
{
    ::TestsClas::runTests();

    QApplication app(argv, args);
    MainWindow mainWindow;
    mainWindow.setGeometry(100, 100, 800, 500);
    mainWindow.show();

    return app.exec();
}

Os resultados do teste são impressos na janela de saída do aplicativo.

Outras dicas

Não coloque o código de teste em seu projeto principal. Você deve criar um projeto separado para seus testes de unidade e construir e executá -lo. Não modifique seu projeto principal para executar testes.

Idealmente, você deve ter um servidor de construção configurado que invocará automaticamente seu projeto de teste de unidade e criará seus lançamentos. Você pode escrever isso.

Nunca hackeie seu aplicativo principal para executar seus testes de unidade. Se você precisar fazer testes de nível de integração (ou seja, testando como o programa funciona depois de ser totalmente compilado e integrado), você deve usar uma estrutura de teste de integração diferente que permita testar o programa de uma fonte com script externamente. O mole de Froglogic é uma dessas estruturas.

Use vários alvos e sinalizadores de pré -processador para conseguir isso:

int main(int argv, char *args[])
{
#ifdef TEST
    ::TestsClas::runTests();
#endif
    QApplication app(argv, args);
    MainWindow mainWindow;
    mainWindow.setGeometry(100, 100, 800, 500);
    mainWindow.show();

    return app.exec();
}

Em seguida, entre no painel Projetos e adicione um novo "teste" de alvo duplicando "Debug". Em etapas de construção, adicione um argumento a fazer isso é

CXXFLAGS+=-DTEST

Dessa forma, o teste está incluído no alvo de teste, mas não nos alvos de depuração ou liberação.

O QT Creator ainda não suporta explicitamente os testes de unidade em execução no momento (até o QT Creator 2.0beta). Portanto, por enquanto, você precisará iniciar os testes manualmente.

Se você estiver usando um sistema de construção como o CMake em vez do QMake, poderá tentar executar os testes de unidade automaticamente como parte do próprio processo de construção. Infelizmente, não estou ciente de nenhum método para fazer isso com o QMake. O CMake é suportado pelo QT Creator, embora não seja tão bom quanto o QMake.

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