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:
Pergunta
Kevin Guimarães
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.