Pergunta

Eu estou usando GNU autotools para o sistema de construção em um projeto particular. Eu quero começar a escrever testes automatizados para verifcation. Eu gostaria de simplesmente digitar "check-make" para tê-lo automaticamente executar estes. Meu projeto é em C ++, embora eu ainda estou curioso sobre a escrita de testes automatizados para outros idiomas também.

Isto é compatível com praticamente todos os testes unitários quadro lá fora (eu estava pensando em usar cppunit)? Como faço para ligar estes unidade testar estruturas em cheque make? Posso ter certeza que eu não exigem que o software de teste de unidade a ser instalada para ser capaz de configurar e construir o resto do projeto?

Foi útil?

Solução

Para fazer teste quando você emitir make check, você precisa adicioná-los à variável TESTS

Assumindo que você já construiu o executável que executa os testes de unidade, basta adicionar o nome do executável para a variável de testes como este:

TESTS=my-test-executable

Em seguida, deverá ser executado automaticamente quando você make check, e se os retornos executáveis ??um valor diferente de zero, ele irá informar que, como uma falha no teste. Se você tiver vários executáveis ??de teste de unidade, apenas enumerá-los todos na variável TESTS:

TESTS=my-first-test my-second-test my-third-test

e eles ficarão com prazo.

Outras dicas

Eu estou usando Verifique 0.9.10

    configure.ac
    Makefile.am
    src/Makefile.am
    src/foo.c
    tests/check_foo.c
    tests/Makefile.am
  1. ./configure.ac

    PKG_CHECK_MODULES ([VERIFICAR], [verificação> = 0.9.10])

  2. ./tests/Makefile.am para códigos de teste

    TESTS = check_foo
    check_PROGRAMS = check_foo
    check_foo_SOURCES = check_foo.c $(top_builddir)/src/foo.h
    check_foo_CFLAGS = @CHECK_CFLAGS@
    
  3. e código de teste de escrita, ./tests/check_foo.c

    START_TEST (test_foo)
    {
        ck_assert( foo() == 0 );
        ck_assert_int_eq( foo(), 0);
    }
    END_TEST
    
    /// And there are some tcase_xxx codes to run this test
    

Usando o cheque que você pode usar tempo de espera e sinal de aumento. é muito útil.

Você parece estar pedindo 2 perguntas no primeiro parágrafo.

O primeiro é sobre a adição de testes para as autotools Conjunto de ferramentas GNU - mas esses testes, se eu estou entendendo corretamente, são tanto para validar que o ambiente necessário para construir a sua aplicação existe (bibliotecas dependentes e ferramentas), bem como adaptar a construção para o meio ambiente (diferenças plataforma específica).

O segundo é sobre a unidade de teste do aplicativo C ++ e onde a invocar esses testes, você propôs fazê-lo a partir da cadeia de ferramentas autotools, presumivelmente do script configure. Fazer isso não é convencional - embora colocando um alvo 'teste' em seu Makefile é uma maneira mais convencional de executar o seu conjunto de testes. Os passos típicos para a construção e instalação de uma aplicação com autotools (pelo menos do ponto de vista de um usuário, não do seu, o desenvolvedor, perspectiva) é executar o script configure, make, em seguida, executar, em seguida, opcionalmente executar o teste marca e, finalmente, fazer a instalação.

Para a segunda questão, não querendo cppunit ser uma dependência, porque não basta distribuí-lo com o seu aplicativo c ++? você pode simplesmente colocá-lo direito em que formato nunca arquivo que você está usando (seja tar.gz, tar.bz2 ou .zip) junto com seu código fonte. Eu tenho cppunit usado no passado e estava feliz com isso, ter JUnit usado e outros frameworks estilo xUnit.

Você pode usar TESTS do Automake para executar programas gerados com check_PROGRAMS mas isso vai assumir que você está usando um driver de log e um compilador para a saída. É provavelmente mais fácil de ainda usar check_PROGRAMS mas para chamar o conjunto de testes usando uma regra local no Makefile:

check_PROGRAMS=testsuite

testsuite_SOURCES=...
testsuite_CFLAGS=...
testsuite_LDADD=...

check-local:
    ./testsuite
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top