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