Pesquisar

Postagens populares

quinta-feira, 11 de outubro de 2012

Instalando o GTest no Ubuntu, Framework de testes para C++

Hoje em dia não há como falar em desenvolvimento sem falar em TESTES, se você desenvolve com linguagens como Ruby, Python, Scala... você jã deve está familiarizado no assunto. Mas, que tal fazer um Coding Dojo em C++.
Desenvolvido pelo Google, conheça o Framework GTest, uma ferramenta para escrever testes para C++ em uma variedade de plataformas como (Linux, Mac OS X, Windows, Cygwin, Windows CE, e Symbian). Baseado na arquitetura xUnit. Suporta testes automáticos de descoberta, um rico conjunto de assertivas, assertivas baseadas na definição do usuário, controle de testes mortos, falha fatal e não fatal, testes parametrizados por tipo ou valor, varias opções de executar testes, e geração relatório do teste para XML.
Então, veja como instalar esta incrível ferramenta no Ubuntu e começar a fazer seus testes.
1º Passo - É simples, basta instalar (no Terminal):

apt-get install libgtest-dev

 Agora, um pequeno detalhe! Por razão de uma pequena regra da definição da linguagem C++ "Definição Única de Classes" o framework não é compilado na hora da instalação, então, você mesmo deve compilar.

2º Passo - Compilar e Localizar (no Terminal):

# Ir para a sua home
cd ~
# Compilar a biblioteca
g++ -I /usr/include/gtest -I /usr/src/gtest/ -c /usr/src/gtest/src/gtest-all.cc
# Arquivar o arquivo gerado como uma biblioteca estática
ar -rv libgtest.a gtest-all.o
#Mover para um local onde o linker do GCC possa encontrar
mv libgtest.a /usr/lib/

Ok, agora o framework está pronto para uso, veja este exemplo:

/*
Definição da classe Pessoa: Pessoa.h
*/
#ifndef PESSOA_H
#define PESSOA_H

#include "string"
using std::string;

class Pessoa{
 public:
  Pessoa();
  void setNome(string nome);
  string getNome();
  void setIdade(int idade);
  int getIdade();
 private:
  string nome;
  int idade;
};
#endif

/*
Implementação da classe Pessoa: Pessoa.cpp
*/

#include "Pessoa.h"

Pessoa::Pessoa(){};

void Pessoa::setNome(string nome){
    this->nome = nome;
}

string Pessoa::getNome(){
    return this->nome;
}

void Pessoa::setIdade(int idade){
    this->idade = idade;
}

int Pessoa::getIdade(){
    return this->idade;
}

// Arquivo de testes: teste.cpp
#include "Pessoa.h"
#include "gtest/gtest.h"
#include "string"
using std::string;

TEST(Pessoa, testarMetodosParaNome){
  string nome = "AJ O. Alves";

  Pessoa* pessoa = new Pessoa();

  pessoa->setNome(nome);

  EXPECT_EQ(pessoa->getNome(), nome);
}

TEST(Pessoa, testarMetodosParaIdade){
  int idade = 24;

  Pessoa* pessoa = new Pessoa();

  pessoa->setIdade(idade);

  EXPECT_EQ(pessoa->getIdade(), idade);
}

int main(int argc, char* *argv) {
  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

Para rodar este teste é simples, há apenas duas considerações a serem feitas:
1º - Caso o linker não encontre o GTeste adicione "/usr/lib/libgtest.a" no comando
2º - Sempre adicione a opção "-lpthread" no comando

# Makefile
all:
    gcc -c ./*.cpp
    g++ ./teste.cpp Pessoa.o /usr/lib/libgtest.a -o teste.bin -fPIC -O2 -g -Wall -lpthread

clean:
    rm *.o
    rm ./teste.bin

A saída será:


 Para se aprofundar mais, visite e guarde este link : Documentação

Nenhum comentário: