Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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...
Upcoming SlideShare
Loading in …5
×

QTestLib: Criando unit tests inteligentes para projetos baseados em Qt

675 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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)

×