Ir para conteúdo
Fórum Script Brasil
  • 0

CuTest: C Unit Testing Framework


Kevin Guimarães

Pergunta

Com intuito de compreender e entender sobre o Frameworks de testes, nós acadêmicos do curso de Engenharia de computação a pedido do professor fomos em busca de ferramentas para serem exploradas.

Escolhemos o CuTest por ser open source e por trabalhar com a linguagem C, linguagem a qual utilizamos diariamente em nosso dia a dia do nosso curso.  

 

Apesar de open source nos deparamos com uma grande falta de informação sobre o mesmo, sendo que todo conteúdo oficial se encontra em (http://cutest.sourceforge.net/) para tentar auxiliar as pessoas que possam se interessar pela ferramenta traduzimos o README e inserimos os códigos que usamos para utilizar a ferramenta, espero que a experiencia que tivemos ajude de certa forma e que possa ser acrescentada mais informações sobre o mesmo.

 

COMO USAR

 

Você pode usar o CuTest para criar testes de unidade para impulsionar seu desenvolvimento no estilo de Extreme Programming. Você também pode adicionar testes de unidade, em código existente para garantir que funcione como você deseja.

 

Seus testes de unidade são um investimento. Eles permitem que você mude o seu modo de codificar, podendo adicionar novos recursos com confiança sem se preocupar em acidentalmente quebrando recursos anteriores.

 

 

LICENCIAMENTO

 

Para detalhes sobre licenciamento, veja license.txt.

 

 

COMEÇANDO

 

Para adicionar testes unitários ao seu código C, os únicos arquivos que você precisa são CuTest.c e CuTest.h.

 

CuTestTest.c e AllTests.c foram incluídos para fornecer uma

exemplo de como escrever testes de unidade e, em seguida, como agregá-los em suítes e em um único arquivo AllTests.c. Suites permitem que você possa colocar testes de grupo em conjuntos lógicos. AllTests.c combina todas as suites e os executa.

 

Você não deveria ter que olhar para dentro do CuTest.c. Procurando em

CuTestTest.c e AllTests.c (por exemplo, uso) devem ser

suficiente.

 

Depois de baixar os fontes, execute seu compilador para criar um

executável chamado AllTests.exe. Por exemplo, se você estiver usando

Windows com o compilador cl.exe que você digitaria:

 

    cl.exe AllTests.c CuTest.c CuTestTest.c

    AllTests.exe

 

Isto irá executar todos os testes unitários associados ao CuTest e imprimir

a saída no console. Você pode substituir o cl.exe pelo gcc ou

seu compilador favorito no comando acima.

 

 

EXEMPLO DETALHADO

 

Aqui está um exemplo mais detalhado. Vamos trabalhar através de um simples teste, um primeiro exercício. O objetivo é criar uma biblioteca de string. Serviços de utilidade pública. Primeiro, vamos escrever uma função que converta string terminada em null todas as letras em maiúsculas.

 

Assegure-se de que CuTest.c e CuTest.h sejam acessíveis a partir do seu projeto. Em seguida, crie um arquivo chamado StrUtil.c com estes

conteúdo:

 

    #include "CuTest.h"

    

    char * StrToUpper (char * str) {

        return str;

    }

    

    void TestStrToUpper (CuTest * tc) {

        char * input = strdup ("hello world");

        char * actual = StrToUpper (entrada);

        char * esperado = "OLÁ MUNDO";

        CuAssertStrEquals (tc, esperado, real);

    }

   

    CuSuite * StrUtilGetSuite () {

        CuSuite * suite = CuSuiteNovo ();

        SUITE_ADD_TEST (suite, TestStrToUpper);

        return suite;

    }

    

Crie outro arquivo chamado AllTests.c com estes conteúdos:

 

    #include "CuTest.h"

    

    CuSuite * StrUtilGetSuite ();

    

    void RunAllTests (void) {

        CuString * output = CuStringNew ();

        CuSuite * suite = CuSuiteNovo ();

        

        CuSuiteAddSuite (suite, StrUtilGetSuite ());

    

        CuSuiteRun (suite);

        CuSuiteSummary (suite, saída);

        CuSuiteDetails (suite, saída);

        printf ("% s \ n", saída-> buffer);

    }

    

    int main (void) {

        RunAllTests ();

    }

 

Então digite isto na linha de comando:

 

    gcc AllTests.c CuTest.c StrUtil.c

 

Para compilar. Você pode substituir o gcc pelo seu compilador favorito.

O CuTest deve ser portátil o suficiente para lidar com todas as versões do Windows e do Unix. Então, para executar o tipo de testes:

 

    a.out

 

Isso imprimirá um erro porque não implementamos o StrToUpper corretamente. Estamos apenas retornando a string sem alterá-lo para maiúsculas.

 

    char * StrToUpper (char * str) {

        return str;

    }

 

Reescreva isto da seguinte forma:

 

    char * StrToUpper (char * str) {

        char * p;

        para (p = str; * p; ++ p) * p = toupeira (* p);

        return str;

    }

 

Recompile e execute os testes novamente. O teste deve passar este

Tempo.

 

 

O QUE FAZER A SEGUIR

 

Neste ponto, você pode querer escrever mais testes para o

Função StrToUpper. Aqui estão algumas ideias:

 

TestStrToUpper_EmptyString: passar em ""

TestStrToUpper_UpperCase: passar em "HELLO WORLD"

TestStrToUpper_MixedCase: passe em "HELLO world"

TestStrToUpper_Numbers: passe em "1234 hello"

 

Enquanto você escreve cada um desses testes, adicione-o ao StrUtilGetSuite

função. Se você não fizer, os testes não serão executados. Mais tarde, enquanto você escreve

outras funções e escrever testes para eles não se esqueça de incluir os

em StrUtilGetSuite também. A função StrUtilGetSuite deve

inclua todos os testes no StrUtil.c

 

Com o tempo, você criará outro arquivo chamado FunkyStuff.c

contendo outras funções não relacionadas ao StrUtil. Siga o mesmo

padronizar. Crie uma função FunkyStuffGetSuite no FunkyStuff.c.

E adicione FunkyStuffGetSuite a AllTests.c.

 

O framework é projetado da maneira que é para que seja fácil

organize muitos testes.

 

A GRANDE IMAGEM

 

Cada teste individual corresponde a um CuTest. Estes são agrupados

para formar um CuSuite. CuSuites pode realizar CuTests ou outros CuSuites.

AllTests.c coleta todos os CuSuites no programa em um único

CuSuite que então funciona como um único CuSuite.

 

O projeto é open source então sinta-se livre para dar uma espiada

capô no arquivo CuTest.c para ver como funciona. CuTestTest.c

contém testes para CuTest.c. Então o CuTest testa ele mesmo.

 

Desde AllTests.c tem um main () você precisará excluir isso quando

você está construindo seu produto. Aqui está uma maneira mais agradável de fazer isso se

você quer evitar mexer com várias construções. Remova o principal ()

em AllTests.c. Note que apenas chama RunAllTests (). Em vez de

vamos chamar isso diretamente do programa principal.

 

Agora no main () do programa atual, verifique se o

opção de linha de comando "- teste" foi passada. Se foi então eu chamo

RunAllTests () de AllTests.c. Caso contrário, execute o programa real.

 

O envio dos testes com o código pode ser útil. Se você clientes

queixar-se de um problema, você pode pedir-lhes para executar os testes de unidade

e enviar-lhe a saída. Isso pode ajudá-lo a isolar rapidamente o

peça do seu sistema que está com defeito no cliente

meio Ambiente.

 

CuTest oferece um rico conjunto de funções CuAssert. Aqui está uma lista:

 

void CuAssert (CuTest * tc, mensagem char *, condição int);

void CuAssertTrue (CuTest * tc, int condição);

void CuAssertStrEquals (CuTest * tc, char * esperado, char * real);

void CuAssertIntEquals (CuTest * tc, int esperado, int real);

void CuAssertPtrEquals (CuTest * tc, void * esperado, void * actual);

void CuAssertPtrNotNull (CuTest * tc, void * pointer);

 

O projeto é open source e assim você pode adicionar outros mais poderosos

afirma para tornar seus testes mais fáceis de escrever e mais concisos.

Por favor, sinta-se livre para me enviar as alterações que você faz para que eu possa

incorporá-los em lançamentos futuros.

 

Se você encontrar algum erro neste documento, entre em contato comigo

asimjalis@peakprogramming.com.

 

 

GERAÇÃO AUTOMATIZADA DO SUITE DE TESTE

 

make-tests.sh irá percorrer todos os arquivos .c no atual

diretório e gerar o código para executar todos os testes contidos

eles. Usando este script você não precisa se preocupar em escrever

AllTests.c ou lidar com qualquer um dos outros códigos de suite.

 

 

CRÉDITOS

 

Essas pessoas contribuíram com mudanças de código úteis para o projeto CuTest.

Obrigado!

 

- [02.23.2003] Dave Glowacki <dglo@hyde.ssec.wisc.edu>

- [04.17.2009] Tobias Lippert <herrmarder@googlemail.com>

- [11.11.2009] Eli Bendersky <eliben@gmail.com>

- [12.14.2009] Andrew Brown <abrown@datasci.com>

 

 

 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...