×
Namespaces

Variants
Actions

Criando um projeto Symbian C++ com suporte a testes de unidade

From Nokia Developer Wiki
Jump to: navigation, search

Archived.pngAquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.

Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)


Article Metadata

Exemplo de código
Artigo
Criado por xharada em 08 Feb 2009
Última alteração feita por lpvalente em 01 Mar 2014

Contents

Introdução

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.

Primeiro Passo: Download e preparação do Framework SymbianOSUnit

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.

Symbianosunitfolders.jpg

Figura 1: Pastas dentro do pacote do SymbianOSUnit.

Dentre estas pastas, duas são de maior importância:

  • SymbianOSUnit/ onde o código do framework é armazenado.
  • Tutorial/ onde existe uma aplicação exemplo com importantes scripts e arquivos.

Após isto, importe o diretório SymbianOSUnit/ como um Filesystem (Sistema de Arquivos) em seu workspace, como ilustrado na Figura 2.

  • Primeiro crie um projeto vazio em seu workspace, seguindo:
    • File->New -> Project -> General (Arquivo->Novo->Projeto->Geral)
  • Após isto, importe a pasta SymbianOSUnit/ do framework SymbianOsUnit, como ilustrado na Figura 2 seguindo:
    • File->Import->General -> File System (Arquivo->Importar->Geral->Sistema de Arquivos)

Importsymbianosunit.jpg

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:

Symbianosunitimported.jpg

Figura 3: Pasta SymbianOSUnit importada.

Segundo Passo: Criando seu primeiro projeto:

Crie um projeto GUI S60 Application usando o wizard do Carbide. Após isto, crie uma classe para ser testada, como a seguinte classe:

DoStuffClass.h

#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

DoStuffClass.cpp

#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:

Symbianosunitprojectempty.jpg

Figura 4: Projeto que será testado.

Após criado o projeto, é necessário prepará-lo para testes de unidade.

Terceiro Passo: Criando e Preparando os Testes:

Primeiro, crie uma pasta test/ em seu projeto. Nesta pasta crie sua classe TestSuite (TestHeader.h TestSource.cpp) como por exemplo:

TestHeader.h

#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

TestSource.cpp

#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.

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:

  • Da pasta SymbianOsUnit/Tutorial/group/ copie o arquivo ExtraTestBuildTasks.bldmake para a pasta yourProject/group;
  • Da pasta SymbianOsUnit/Tutorial/test copie o arquivo testgen.bat para a pasta yourProject/test.

Após isto, atualize o arquivo bld.inf do seu projeto, adicionando as linhas que aparecem depois da macro PRJ_TESTMMPFILES.

bld.inf

/*
============================================================================
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:

Symbianosunitproject.jpg

Figura 5: Projeto Symbian com código de testes.

Último Passo: Executando os 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:

Symbianosunitrun.jpg

Figura 6: Executando a aplicação com a suite de testes.

O emulador irá executar a aplicação symbianosunit como a figura a seguir:

Symbianosunitemulator.jpg

Figura 7: Aplicação sendo executada no emulador.

E é isto! Seu primeiro projeto com suporte a testes de unidade.

Criando um caso com falha

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);
}

Initial state of application After running script in emulator

Código Fonte do Exemplo

Links Externos

This page was last modified on 1 March 2014, at 17:09.
100 page views in the last 30 days.
×