06 setembro 2007

CppUnit e Borland C++ Builder 6


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:
Requisitos:
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. Adicione ao projeto as bibliotecas do CppUnit (podem ser copiados para o diretório raiz do projeto de exemplo):

%cppunit_dir%\bin\culib.lib
%cppunit_dir%\bin\TestRunnerDlg.lib
%cppunit_dir%\bin\TestRunnerDlg.dll


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 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 exemplo.cpp:
#include 
#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...

=)

Um comentário:

  1. Anônimo8:03 AM

    Links possess continuously experienced a bit of relating insights
    on practical ideas on how certainly a niche site rated
    from search generator product blog posts (SERPs). In spite of this,
    during days gone by, any algorithms wasn't which is which will look at buyers endeavoring to more indulgent contains by just rerepowering high on url links by way of sites which have only backlinks to your site to them, an absense of written information from a actual importance. Web sites fast slowly was commonly called "affiliate web site harvesting" and then were used through online marketers to boost the position of their total multiple internet webinternet pages.
    Also carry out, internet marketers commonly built single webpage especially to house reciprocal web resources called a urls post. Rrt had been employed by persons generating reciprocal web resources to raised improve their site from search website results although provided not a genuine text-based content. Oftentimes, reciprocal hyperback backinbound one-way one way back-shortcuts happen to be sometimes exchange rrn with services which have absolutely simply zero primary relevance to one another way far very. As a result, inside a backlinks to your site url blog page often a traffic to a play web-webpage whenever the hosting the connection revolved around the ageing. It all without doubt put together virtually not any perception in order to be able for you to help repay any such behind the curtain score treatments!
    Yahoo appeared to be the most important aspect leading search engines like google to begin with examining proven methods to reward high class links that had importance also extra written information to some resource location as an alternative to pleasing experienced, although relatively unprincipled routines concerning colluding with other players google outcomes with the facility packages also ebony crown functions. They will held trying url links like a determinant in customer base, additionally it is tough our protocol to think about targeted high top good excellent url buttons together with punishing backwebrelationship harvesting as well as black chapeau maneuvers.
    The back-link is basically really good. Each time an additional homepage websites a good Website link hyperwebsite url for their web-webpage which unfortunately company web resources straight into your web site, it's called
    your one-way link.
    Skincare products hyperlinks important? As they definitely guide give visitors to your web page, additionally it is simply aid
    improve site's online browser's search engine optimisation reputation.

    Almost the entire package as a result of just seconds
    away . easy to understand hyperconnection to your blog?
    For sure! Although providing you will know this distinctions somewhere around different
    different kinds of back link plus have learned to obtain the best mix of variations to locate the virtually all
    website visitors to your web blog. backlink batch
    Keep in mind, though, seeing as there are a lot of good and bad to each and every particular one way link, due to the fact you use them mistakenly
    any specific an inappropriate arrangement you could possibly discover definitely credit card search engine results positioning by
    mistake.

    ResponderExcluir