CppUnit e o Borland C++ Builder 6
Publicado por Victor Hugo Germano em Quinta-feira, Setembro 6, 2007
Post originalmente inserido em A Maldita Comédia, com o mesmo título. Segue a transcrição do post, que achei bastante pertinente inserir no CodingDojoFloripa.
Bem, como vocês já sabem, estou em uma nova empresa, a Audaces. Em princípio trabalharei com integração contínua, e estou no momento fazendo testes com o ambiente da Borland. É um mundo completamente novo para mim, e estou bastante animado com os resultados! C++!! Segue abaixo um pequeno(e simples) tutorial sobre como iniciar seus testes utilizando Borland C++ Builder 6.
Configuracao de ambiente para testes utilizando o CPPUnit e Borland C++ Builder 6 (BCB6)
Referências:
- CppUnit Wiki (inglês)
- Code Gear from Borland: CppUnit Tests with C++BuilderX (inglês)
- nao funcionou corretamente no BSC6
- Curso online: Pruebas unitarias con CppUnit (espanhol)
- funcionou corretamente no BSC6
Requisitos:
- Borland C++ Builder 6 =)
- Versão do CppUnit para o BCB6
Instalação
Será apresentada a utilização do cppUnit para o C Builder através da criação de uma aplicação simples. Seguem os passos para tal:
1. Descompactar CPPUnitBCB6 (Ex: C:\CPPUnitBCB6)
2. Iniciar um projeto novo no BCB (File> New >Application)
2.1 Vincular ao projeto os Headers relativos ao CppUnit.
Faça isso adicionando os diretórios ao projeto em “Project> Options> Directories/Conditionals >Include path”
Selecione os diretórios:
- %cppunit_dir%\borland\TestRunner
- %cppunit_dir%\test\textui
- %cppunit_dir%\test\framework
- %cppunit_dir%\test\framework\extensions
2.2 Remover o formulário inicial (Form1) em “Project> Remove from Project…> Unit1.cpp”
3. Bibliotecas:
3.1 Adicione ao projeto as bibliotecas do CppUnit em “Project>Add to Project…”
- %cppunit_dir%\bin\culib.lib
- %cppunit_dir%\bin\TestRunnerDlg.lib
3.2 Copie a dll existente em: %cppunit_dir%\bin\TestRunnerDlg.dll para dentro do diretório do projeto
4. Crie uma classe de testes Simples:
A primeira classe a ser criada será chamada de FirstTest. Iniciaremos por seu Header, que deve extender a classe TestCase. É necessário declarar os métodos setUp() e tearDown() para que o funcionamento ocorra normalmente.
#ifndef FIRST_TEST_H
#define FIRST_TEST_H
#include "TestCase.h"
#include "TestCaller.h"
class FirstTest: public TestCase
{
public:
FirstTest(std::string name);
void setUp();
void tearDown();
static Test *suite();
protected:
void testAssertTrue();
void testAssertFalse();
void testFalhara();
void testAssertMaisUmExemplo();
};
typedef TestCaller<firsttest>
FirstTestCaller;
#endif
.Abaixo segue a implementação dessa classe. FirstTest.cpp
#include "FirstTest.h"
#include "TestSuite.h"
FirstTest::FirstTest(std::string name): TestCase(name) {
}
void FirstTest::setUp() { }
void FirstTest::tearDown() { }
Test* FirstTest::suite() {
// All tests have to be explicity added to TestSuite to be executed
TestSuite *suite ;
suite = new TestSuite("nameFirstTest");
suite->addTest(
new FirstTestCaller("assert True", &FirstTest::testAssertTrue));
suite->addTest(
new FirstTestCaller("assert False", &FirstTest::testAssertFalse));
suite->addTest(
new FirstTestCaller("teste que falha", &FirstTest::testFalhara));
suite->addTest(
new FirstTestCaller("teste equals", &FirstTest::testAssertMaisUmExemplo));
return (suite);
}
void FirstTest::testAssertTrue()
{
assert( true );
}
void FirstTest::testAssertFalse()
{
assert( !false );
}
void FirstTest::testFalhara()
{
assert( false );
}
void FirstTest::testAssertMaisUmExemplo()
{
assertDoublesEqual(0, 0, 0);
}
6. Testando o funcionamento do CppUnit:
O método suite() serve para que se possa adicionar todos os métodos de testes que a classe possui e que devem ser executados. Caso um método nao seja adicionado ao TestSuite neste método, ele não serpa executado.
Edite o código inicial do projeto (“Project> View Source”), adicionando a chamativa ao CppUnit após a compilar a aplicação. Exemplo projExemplo.cpp:
#include <vcl.h>
#pragma hdrstop
#include "ITestRunner.h"
#include "FirstTest.h"
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
ITestRunner runner;
runner.addTest(FirstTest::suite());
runner.run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
Pressione F9. Uma ferramenta gráfica aparecerá e você terá como visualizar todos os testes escritos na classe FirstTest. Clique em run e divirta-se.
Obs: propositalmente neste tutorial eu inseri um teste que falhará, para que você possa ver o funcionamento da ferramenta…
=)
Edit Note: Pequena correção para ampliar o entendimento do documento
rascunho » Blog Archive » links for 2007-09-06 disse
[...] CppUnit e o Borland C++ Builder 6 « Coding Dojo Floripa (tags: dojofloripa.wordpress.com 2007 mes8 dia6 at_tecp testes builder cbuilder blog_post) [...]
Tudo sobre TDD « Coding Dojo Floripa disse
[...] CppUnit e Borland C++ Builder6: (português) [...]
Edison Gustavo Muenz disse
Minhas experincias com o CppUnit não foram muito felizes, principalmente pelo fato de precisar declarar na suite cada teste que será executado.
Eu prefiro o UnitTest++, é um projeto novo, mas eu preferi ele ao CppUnit por ser muito mais simples.
Rafael Nogueira disse
1. CppUnit citado no site da CodeGear (http://dn.codegear.com/article/32704) é o mesmo abordado nesse post?
2. Instalei a “Versão do CppUnit para o BCB6″ e funcionou, porém achei que os relatórios de execução de testes deixam a desejar, por exemplo, para reportar os resultados histórivos para a gerência. Gostaria de saber se o CppUnit possui algum tipo de relatório de saída mais elaborado?
3. Caro Edison Gustavo Muenz, não consegui congigurar o UnitTest++ que você citou no BCB6. Essa suite não seria específica para projetos no vsnet?