Contents |
Este artigo apresenta um passo-a-passo de como criar um projeto Symbian C++ terceira edição com suporte a teste de unidades usando o Framework SymbianOSUnit [1]. Primeiro é abordado o processo para importar o código do SymbianOSUnit para o seu workspace no carbide. Em seguida é mostrado um exemplo de como escrever suites de teste para o seu código. Ao final, é mostrado como configurar os arquivos de projeto para compilar e executar sua suite de testes.
Com este artigo, o leitor será capaz de criar e adicionar testes de unidades aos seus projetos.
SymbianOSUnit é um framework de testes gratuito e de código livre para Symbian.
O framework SymbiaOSUnit pode ser baixado aqui. Após o download, extraia o pacote dentro do seu sistema de arquivos. Dentro do pacote existe a estrutura de diretórios apresentada na Figura 1.
Figura 1: Pastas dentro do pacote do SymbianOSUnit.
Dentre estas pastas, duas são de maior importância:
Após isto, importe o diretório SymbianOSUnit/ como um Filesystem (Sistema de Arquivos) em seu workspace, como ilustrado na Figura 2.
Figura 2: Importando a pasta symbianosunit para o seu workspace do carbide.
Depois de importar esta pasta, seu workspace está configurado para suportar testes de unidade. O novo projeto irá aparecer como:
Figura 3: Pasta SymbianOSUnit importada.
Crie um projeto GUI S60 Application usando o wizard do Carbide. Após isto, crie uma classe para ser testada, como a seguinte classe:
#ifndef DOSTUFFCLASS_H
#define DOSTUFFCLASS_H
// INCLUDES
#include <e32std.h>
#include <e32base.h>
/**
* CDoStuffClass
*
*/
class CDoStuffClass : public CBase
{
public:
// Constructors and destructor
~CDoStuffClass();
static CDoStuffClass* NewL();
static CDoStuffClass* NewLC();
public:
/**
* Method that will be tested.
*/
TInt MethodToTest();
private:
CDoStuffClass();
void ConstructL();
};
#endif // DOSTUFFCLASS_H
#include "DoStuffClass.h"
CDoStuffClass::CDoStuffClass()
{
// No implementation required
}
CDoStuffClass::~CDoStuffClass()
{
}
CDoStuffClass* CDoStuffClass::NewLC()
{
CDoStuffClass* self = new (ELeave) CDoStuffClass();
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CDoStuffClass* CDoStuffClass::NewL()
{
CDoStuffClass* self = CDoStuffClass::NewLC();
CleanupStack::Pop(); // self;
return self;
}
void CDoStuffClass::ConstructL()
{
}
TInt CDoStuffClass::MethodToTest()
{
return 2;
}
Seu projeto criado irá aparecer como:
Figura 4: Projeto que será testado.
Após criado o projeto, é necessário prepará-lo para testes de unidade.
Primeiro, crie uma pasta test/ em seu projeto. Nesta pasta crie sua classe TestSuite (TestHeader.h TestSource.cpp) como por exemplo:
#ifndef TESTHEADER_H
#define TESTHEADER_H
#include "TestSuite.h"
#include "DoStuffClass.h"
/**
Encapsulates a suite of tests.
Any member function starting 'test' is interpreted as a test to be executed.
The tests will be executed in the order they are in this file.
Note that the code for the individual tests may be in different CPP files.
*/
class CTest : public CxxTest::TestSuite
{
public:
CTest(const TDesC8& aSuiteName):CxxTest::TestSuite(aSuiteName){}
private:
void setUp();
void tearDown();
public:
void testFirstMethod();
void testFirstMethodAgain();
private:
CDoStuffClass* iMyClass;
};
#endif // TESTHEADER_H
#include "TestHeader.h"
#include "TestDriver.h"
#include "Logger.h"
void CTest::setUp()
{
iMyClass = CDoStuffClass::NewL();
}
void CTest::tearDown()
{
if( iMyClass )
{
delete iMyClass;
}
}
void CTest::testFirstMethod()
{
TInt i = 2;
TInt j = iMyClass->MethodToTest();
TS_ASSERT_EQUALS(i,j);
}
void CTest::testFirstMethodAgain()
{
TInt i = 2;
TInt j = iMyClass->MethodToTest();
TS_ASSERT_EQUALS(i,j);
}
IMPORTANTE: Não deixe que o Carbide adicione o arquivo TestSource.cpp no arquivo de projeto mmp. Este arquivo (TestSource.cpp) será adicionado em outro arquivo mmp. Também, não se preocupe com os arquivos de include por enquanto. Estes serão adicionados no arquivo symbianosunit.mmp.
Após criar a suite de testes, configure seu arquivo symbianosunit.mmp. O SymbianOsUnit é executado como uma outra aplicação, portanto é necessário compilá-lo. Para isso é necessário criar um novo arquivo .mmp dentro da pasta group/ com o nome symbianosunit.mmp.
//specify test source files and libraries along with userincludes
SOURCEPATH ..\test
SOURCE TestSource.cpp
SOURCEPATH ..\src
SOURCE DoStuffClass.cpp
USERINCLUDE ..\test
USERINCLUDE ..\inc
//include SymbianOSUnit mmp file from proper directory depending on relative path and target platform
#include "..\..\SymbianOSUnit\SymbianOSUnitApp\group\s60_3rd\SymbianOSUnit.source"
Agora copie os seguintes arquivos do framework symbianosunit:
Após isto, atualize o arquivo bld.inf do seu projeto, adicionando as linhas que aparecem depois da macro PRJ_TESTMMPFILES.
/*
============================================================================
Name : bld.inf
Author :
Copyright : Your copyright notice
Description : This file provides the information required for building the
whole of a MyFirstUnitTestApp.
============================================================================
*/
PRJ_PLATFORMS
WINSCW ARMV5 GCCE
PRJ_MMPFILES
gnumakefile icons_scalable_dc.mk
gnumakefile ..\help\build_help.mk
MyFirstUnitTestApp.mmp
//LINES TO ADD ----------------------------
PRJ_TESTMMPFILES
gnumakefile extratestbuildtasks.bldmake
SymbianOSUnit.mmp
Seu projeto está quase preparado para testes de unidade. Agora, execute o arquivo testgen.bat para gerar o arquivo TestDriver.h dentro da pasta yourProject/test.
Depois disto, as pastas group/ e test/ irão parecer com:
Figura 5: Projeto Symbian com código de testes.
Compile seu projeto. Os arquivos mmp criados irão criar dois arquivos executáveis: YourProject.exe e o SymbianOsUnit.exe (estes nomes são definidos em cada um dos arquivos mmp).
Agora, apenas execute o arquivo symbianosunit.exe como ilustrado na figura a seguir:
Figura 6: Executando a aplicação com a suite de testes.
O emulador irá executar a aplicação symbianosunit como a figura a seguir:
Figura 7: Aplicação sendo executada no emulador.
E é isto! Seu primeiro projeto com suporte a testes de unidade.
Para ver como um teste de unidade pode falhar, apenas modifique a atribuição no arquivo TestSource.cpp como apresentado abaixo:
void CTest::testFirstMethod()
{
TInt i = 1; // Value has been changed, so that we can see the failure test result
TInt j = iMyClass->MethodToTest();
TS_ASSERT_EQUALS(i,j);
}
No related wiki articles found