QTestLib framework: Criando unit tests inteligentes para projetos baseados em Qt. Bruno Abinader 22 de Julho de 2010



Documentos relacionados
Orientação a Objetos Programação em C++

Principais classes e conceitos básicos de Qt. Danilo Freire de Souza Santos

Desenvolvimento Guiado por Testes

Básico, Ferramentas e o Primeiro Programa em Qt

MANUAL DE UTILIZAÇÃO DO PLUGIN GERADOR DE PLUGINS DO TERRAVIEW

Prof. Jhonatan Fernando

Aprenda as melhores práticas para construir um completo sistema de teste automatizado

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Linguagens de Programação

Introdução à Programação

Imóvel Mix SGI. 1. Acesso ao Sistema 2. Aspectos Gerais 3. Configuração da Empresa 4. Cadastro de Usuários

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Plano de curso Básico em microinformática

Introdução à Programação 2006/07. Computadores e Programação

Reaproveitando algoritmos

Entrada e Saída. Interface entre periféricos, processador e memória. Fonte: Minho - Portugal 1

Organização e Arquitetura de Computadores I. de Computadores

1. Configuração Configuração de eventos Pesquisa de eventos Códigos Dados para configuração

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

Controle do Arquivo Técnico

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

Orientação a Objetos

Introdução a Programação de Jogos

Programação Paralela e Distribuída (DCC/UFRJ)

Aula 02 Excel Operações Básicas

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

PROGRAMAÇÃO SERVIDOR PADRÕES MVC E DAO EM SISTEMAS WEB. Prof. Dr. Daniel Caetano

O Processo de Programação

Computação L2. Arquivos. Observação: Material da Disciplina Computação Eletrônica CIN/UFPE.

4.1. UML Diagramas de casos de uso

BACKUP E RESTORE BACKUP (NO MOODLE DO ANO PASSADO)

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

CONCEITOS BÁSICOS DE UM SISTEMA OPERATIVO

Sumário. INF01040 Introdução à Programação. Elaboração de um Programa. Regras para construção de um algoritmo

VisuALG Estruturas de Repetição. Professores: Vilson Heck Junior Felipe Schneider Costa

Universidade Federal de Rondônia Técnicas de Desenvolvimento de Programas Lista 4

MC-102 Aula 01. Instituto de Computação Unicamp

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Validando dados de páginas WEB

SuperStore. Sistema para Automação de Óticas. MANUAL DO USUÁRIO (Módulo Vendas e Caixa)

Ricardo Roberto de Lima UNIPÊ APS-I. Históricos e Modelagem Orientada a Objetos

José Romildo Malaquias

Princípios de funcionamento dos computadores

Microsoft Access: Criar consultas para um novo banco de dados. Vitor Valerio de Souza Campos

Sistemas Operacionais

ESTUDO COMPARATIVO DE BIBLIOTECAS GRÁFICAS I TEGRADAS COM OPE GL

Plano de Aula - Dreamweaver CS6 - cód Horas/Aula

Table of Contents. PowerPoint XP

Conceitos básicos da linguagem C

Para começar a utilizar o Scratch, faz o respectivo download clicando em "Descarrega o Scratch" localizado no cabeçalho da página.

Projeto de Software Orientado a Objeto

Introdução ao Plone. terça-feira, 4 de agosto de 15

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

Guia Prático. PGRural. Adendo Livro Caixa Avançado

Testes de Software. Andrew Diniz da Costa

Trilha Agile TDD e 20 coisas que você precisa saber

PLANOS DE CONTINGÊNCIAS

Testes de Software. Testes de Software. Teste de Validação. Teste de Defeito. Modelo de Entrada e Saída. Modelo de Entrada e Saída

Lição 1 Introdução à programação de computadores

Programação Orientada a Objetos C++

Glossários em Moodle (1.6.5+)

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

DIFERENÇAS ENTRE FUNÇÃO E BLOCO FUNCIONAL; CRIAÇÃO DE FUNÇÃO / BLOCO FUNCIONAL; UTILIZAÇÃO NO LADDER; EXEMPLO DE BLOCO FUNCIONAL;

Ambiente Virtual de Avaliações Utilizando Certificados Digitais. Fernando Gevard Acadêmico Paulo Fernando da Silva - Orientador

Prof. Esp. Adriano Carvalho

LINUX EDUCACIONAL 3.0

Convertendo Algoritmos para a Linguagem C

O processador é um dos elementos componentes do computador moderno, sendo responsável pelo gerenciamento de todo o computador.

Sumário. Capítulo 1 O que é o PHP? Capítulo 2 Instalação do PHP Capítulo 3 Noções básicas de programação... 25

RUP. Evolução. Principais Características do RUP. Principais Características do RUP RUP

Conceitos Básicos de C

Entendendo as Permissões de Arquivos no GNU/Linux

Sua indústria. Seu show. Seu Futuro

Professor: Rômulo César BPMN

Curva ABC. Tecinco Informática Ltda. Av. Brasil, º Andar Centro Cascavel PR

Microsoft Windows: # 1

Configurações do Windows para Leitores de Tela

INF 1005 Programação I

Java. Marcio de Carvalho Victorino

As TIC e a Saúde no Portugal de 2012

Prof. Esp. Adriano Carvalho

A4 Projeto Integrador e Lista de Jogos

O prime gestão é um software online constituído por vários módulos:

Introdução à Lógica de Programação

Sistemas Operacionais e Introdução à Programação. Módulo 1 Sistemas Operacionais

Evitando conflitos em aplicações multi-thread no Delphi/Kylix

WebWork 2. João Carlos Pinheiro.

Microsoft Office PowerPoint 2007

Workshop Construct 2. Gutenberg Neto

APOSTILA DE EXCEL 2007

TESTES AUTOMATIZADOS COM JUNITE MOCKITO

Mozart de Melo Alves Júnior

O WINDOWS 98 é um sistema operacional gráfico, multitarefa, produzido pela Microsoft.

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

CONVENÇÃO DE CÓDIGO JAVA

JAVA NETBEANS PGOO Prof. Daniela Pires Conteúdo

Transcrição:

QTestLib framework: Criando unit tests inteligentes para projetos baseados em Qt Bruno Abinader 22 de Julho de 2010

CONTEÚDO (1/2) Introdução - Quem somos? - O que é o Qt? - O que são unit tests? Ferramentas de testes do Qt - Framework QTestLib - QTest namespace - Benchmarks

CONTEÚDO (2/2) Escrevendo unit tests - Criando uma classe de teste - Comparando valores - Utilizando diferentes valores de entrada - Simulação de eventos Tópicos avançados - Eventos em widgets baseados no QGraphicsView - Acessando membros privados

INTRODUÇÃO Quem somos? Manaus Recife Brasília São Paulo

INTRODUÇÃO O que é o Qt? Framework multiplataforma para desenvolvimento de aplicações

INTRODUÇÃO O que são unit tests? Características: Teste de blocos individuais e independentes de código Validação do comportamento esperado Mensura a qualidade do código gerado Testes podem ser automatizados Benefícios: Simplifica a integração de código Evita bugs de regressão Detecção rápida de bottlenecks

FERRAMENTAS DE TESTES DO QT Framework QTestLib Características: Leve: ~6000 LOC e ~60 símbolos exportados Auto-contido: QT = core testlib Testes são binários independentes Suporte a Data Driven Testing Separação entre lógica e dados Simulação de eventos de teclado e mouse Introspecção de sinais/slots Suporte a benchmarking

FERRAMENTAS DE TESTES DO QT QTest namespace Conteúdo: Métodos públicos: Benchmarking, Data Driven Testing, Simulação de Eventos, Sleep/Wait do Loop de Eventos, Facilitadores de Output Macros: QBENCHMARK, QCOMPARE, QTEST, QVERIFY e outros Tipos: KeyAction, MouseAction, TestFailMode e outros Classes: QSignalSpy e QTouchEventSequence

FERRAMENTAS DE TESTES DO QT Benchmarks Macros: QBENCHMARK / QBENCHMARK_ONCE Backends: Walltime (padrão repete o código várias vezes) Tick Counter (menos repetições, problemas com frequency scaling) Valgrind/Callgrind (resultados exatos, não leva em conta I/O) Event Counter (provê o número de eventos gerados)

ESCREVENDO UNIT TESTS Criando uma classe de teste O que é necessário: Herdar de QObject Implementar cada teste em separado como private slots 4 slots especiais tratados como não-teste: inittestcase() cleanuptestcase() init() cleanup()

ESCREVENDO UNIT TESTS Comparando valores Exemplo: class MinhaClasse: public QObject { Q_OBJECT private slots: void inittestcase() { qdebug("chamado antes de começar a executar os testes"); } void primeiroteste() { QVERIFY(1 == 1); } void segundotest() { Qstring valor( teste ); QCOMPARE(QString( teste ), valor); } void cleanuptestcase() { qdebug("chamado depois da execução de todos os testes"); } };

ESCREVENDO UNIT TESTS Utilizando diferentes valores de entrada Exemplo: class MinhaClasse: public QObject { Q_OBJECT private slots: void meuteste_data() { QTest::addColumn<QString>( texto ); QTest::newRow( texto igual ) << fulano ; Qtest::newRow( texto diferente ) << sicrano ; } void meuteste() { QFETCH(QString, texto); QCOMPARE(texto, fulano ); } };

ESCREVENDO UNIT TESTS Simulação de eventos Exemplo: class MinhaClasse: public QObject { Q_OBJECT private slots: void testeeventoteclado() { QlineEdit campotexto; QtTest::keyClicks(&campoTexto, olá FISL ); QCOMPARE(campoTexto.text(), olá FISL ); } void testeeventomouse() { QpushButton botao; QsignalSpy espiaocliquebotao(&botao, SIGNAL(clicked())); QtTest::MouseClick(&botao, Qt::LeftButton); QVERIFY(espiaoCliqueBotao.count() == 1); } };

TÓPICOS AVANÇADOS Eventos em itens do QGraphicsWidget Exemplo: class MinhaClasse: public QObject { Q_OBJECT private slots: void testeqgv() { QgraphicsWidget widget; scene.additem(&widget);... QtTest::mouseClick(view.viewport(), Qt::LeftButtom, 0, widget.geometry().center().maptoscene()}; } };

TÓPICOS AVANÇADOS Acessando membros privados Método 1: Friend class class mywidget : public Qwidget friend class mywidgettest; Método 2: Include hack #define private public #define protected public #include mywidget.h #undef protected #undef private

Obrigado! Perguntas? Contato: bruno.abinader@openbossa.org (abinader @ irc.freenode.org) Próximas palestras: Plasma Animations Overview (23/07 13:00) Desenvolvendo aplicações para dispositivos Nokia usando Linux (23/7-13:00) Gallium3D: Understand the Linux Graphical Infrastructure (24/07-17:00)