QTestLib framework:Criando unit tests inteligentespara projetos baseados em QtBruno Abinader22 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...
CONTEÚDO (2/2)Escrevendo unit tests- Criando uma classe de teste- Comparando valores- Utilizando diferentes valores de ent...
INTRODUÇÃOQuem somos?ManausBrasíliaSão PauloRecife
INTRODUÇÃOO que é o Qt?Framework multiplataforma para desenvolvimento de aplicações
INTRODUÇÃOO que são unit tests?Características:• Teste de blocos individuais e independentes de código• Validação do compo...
FERRAMENTAS DE TESTES DO QTFramework QTestLibCaracterísticas:• Leve: ~6000 LOC e ~60 símbolos exportados• Auto-contido: QT...
FERRAMENTAS DE TESTES DO QTQTest namespaceConteúdo:• Métodos públicos: Benchmarking, Data Driven Testing,Simulação de Even...
FERRAMENTAS DE TESTES DO QTBenchmarksMacros: QBENCHMARK / QBENCHMARK_ONCEBackends:• Walltime (padrão – repete o código vár...
ESCREVENDO UNIT TESTSCriando uma classe de testeO que é necessário:• Herdar de QObject• Implementar cada teste em separado...
ESCREVENDO UNIT TESTSComparando valoresExemplo:class MinhaClasse: public QObject{Q_OBJECTprivate slots:void initTestCase()...
ESCREVENDO UNIT TESTSUtilizando diferentes valores de entradaExemplo:class MinhaClasse: public QObject{Q_OBJECTprivate slo...
ESCREVENDO UNIT TESTSSimulação de eventosExemplo:class MinhaClasse: public QObject{Q_OBJECTprivate slots:void testeEventoT...
TÓPICOS AVANÇADOSEventos em itens do QGraphicsWidgetExemplo:class MinhaClasse: public QObject{Q_OBJECTprivate slots:void t...
TÓPICOS AVANÇADOSAcessando membros privadosMétodo 1: Friend classclass myWidget : public Qwidget…friend class myWidgetTest...
Obrigado!Perguntas?Contato:bruno.abinader@openbossa.org (abinader @ irc.freenode.org)Próximas palestras:“Plasma Animations...
Próximos SlideShares
Carregando em…5
×

QTestLib: Criando unit tests inteligentes para projetos baseados em Qt

661 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
661
No SlideShare
0
A partir de incorporações
0
Número de incorporações
95
Ações
Compartilhamentos
0
Downloads
5
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

QTestLib: Criando unit tests inteligentes para projetos baseados em Qt

  1. 1. QTestLib framework:Criando unit tests inteligentespara projetos baseados em QtBruno Abinader22 de Julho de 2010
  2. 2. 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
  3. 3. CONTEÚDO (2/2)Escrevendo unit tests- Criando uma classe de teste- Comparando valores- Utilizando diferentes valores de entrada- Simulação de eventosTópicos avançados- Eventos em widgets baseados no QGraphicsView- Acessando membros privados
  4. 4. INTRODUÇÃOQuem somos?ManausBrasíliaSão PauloRecife
  5. 5. INTRODUÇÃOO que é o Qt?Framework multiplataforma para desenvolvimento de aplicações
  6. 6. INTRODUÇÃOO 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 automatizadosBenefícios:• Simplifica a integração de código• Evita bugs de regressão• Detecção rápida de bottlenecks
  7. 7. FERRAMENTAS DE TESTES DO QTFramework QTestLibCaracterí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
  8. 8. FERRAMENTAS DE TESTES DO QTQTest namespaceConteú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
  9. 9. FERRAMENTAS DE TESTES DO QTBenchmarksMacros: QBENCHMARK / QBENCHMARK_ONCEBackends:• Walltime (padrão – repete o código várias vezes)• Tick Counter (menos repetições, problemas com frequencyscaling)• Valgrind/Callgrind (resultados exatos, não leva em conta I/O)• Event Counter (provê o número de eventos gerados)
  10. 10. ESCREVENDO UNIT TESTSCriando uma classe de testeO 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()
  11. 11. ESCREVENDO UNIT TESTSComparando valoresExemplo:class MinhaClasse: public QObject{Q_OBJECTprivate 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"); }};
  12. 12. ESCREVENDO UNIT TESTSUtilizando diferentes valores de entradaExemplo:class MinhaClasse: public QObject{Q_OBJECTprivate 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”);}};
  13. 13. ESCREVENDO UNIT TESTSSimulação de eventosExemplo:class MinhaClasse: public QObject{Q_OBJECTprivate 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); }};
  14. 14. TÓPICOS AVANÇADOSEventos em itens do QGraphicsWidgetExemplo:class MinhaClasse: public QObject{Q_OBJECTprivate slots:void testeQGV(){ QgraphicsWidget widget;scene.addItem(&widget);...QtTest::mouseClick(view.viewport(), Qt::LeftButtom, 0,widget.geometry().center().mapToScene()}; }};
  15. 15. TÓPICOS AVANÇADOSAcessando membros privadosMétodo 1: Friend classclass myWidget : public Qwidget…friend class myWidgetTest;…Método 2: Include hack#define private public#define protected public#include “mywidget.h”#undef protected#undef private
  16. 16. 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)

×