Test driving-qml

Preview:

DESCRIPTION

How to test-drive your Qt QML code. Overview on how you do simple testing, UI level testing, synchronous testing, data-driven testing. These are the slides used in the Helsinki MeeGo meetup in 2012.

Citation preview

Test-Driving QMLHelsinki

Artem MarchenkoHelsinki Qt Meetup

May 15, 2012

Artem Marchenko

Principal engineer in a startup connecting grannies to grandchildren

Product Manager shipping multi-

hundred MEur productsThree times Forum Nokia Champion

Qt Ambassador (with 40K+ Nokia N9 app downloads)Scrum Master, Practitioner,

Product Owner and Coach

Engineer, product manager, coach

http://fi.linkedin.com/in/artemmarchenko

Test-Driven Development. Or just testing QML

• What TDD is about• Getting started• Simple Synchronous test• Simulating mouse and keyboard actions• Asynchronous tests (verifying callbacks)• Data-driven tests• Current limitations• Q&As

Test-Driven Development

Remove

duplication

Example of a QML-code developed via TDD

Getting started 1(3)git clone git://gitorious.org/qt-labs/qtest-qml.gitCloning into qtest-qml...remote: Counting objects: 888, done.remote: Compressing objects: 100% (669/669), done.remote: Total 888 (delta 445), reused 393 (delta 187)Receiving objects: 100% (888/888), 411.11 KiB, done.Resolving deltas: 100% (445/445), done.

cd qtest-qml/qmake qtest-qml.pro makemake installmake docsmake check

Project page: http://qt.gitorious.net/qt-labs/qtest-qml

Getting started 2(3)

• Create the simplest test in your project

Getting started 3(2)

• And a script that runs the test: runTests.sh in this case

#!/bin/bash

clear/Users/artem/QtSDK/Desktop/Qt/471/gcc/bin/QMLViewer.app/Contents/MacOS/QMLViewer tst_tddCalculator2.qml

Simple synchronous tests

UI level: simulating mouse click

UI level: simulating touch and drag

Asynchronous testing: tryCompare

Asynchronous testing: SignalSpy

Data-driven tests

Current Limitations• Installation doesn’t install qtest-qml to QtCreator

– Not that you would need it for TDD, but if you are into “just testing” already written code, debugger may be helpful

• Bug: only one TestCase is allowed: http://bugreports.qt.nokia.com/browse/QTBUG-17200 (possibly fixed for 4.8)

– It makes init() and cleanup nearly useless– Organize your test structure by your own tools

• Small difficulties comparing built-in classes (e.g. color)– toString() helps most of the time

Current limitations

• Very strange errors when object/property can be accessed e.g. because of a typo

• Segmentation faults, sometimes even “file not found”• In 95% of cases that is a typo or an attempt to access a

non-public property

Current limitations

• SignalSpy can only count – It cannot examine the signal arguments or the state of

other objects. Is supposed to be fixed for Qt 5.0• Benchmarking is a part of a qtest-qml, but doesn’t

work properly– That is I failed to make it run for a given amount of

times (most of the time it does just a single run)• No built-in device test runners

– Though you can certainly, embed a “run tests” button right into your application

My company TwineLAB Oy

• Startup with proven financing• We need more people excited about high quality software

and bringing end-to-end products to people

• Buzzwords: – Qt/QML– Linux platform– high quality SW– video/audio codecs– server-side Java / GWT– large-scale metrics

artem.marchenko@twinelab.com

Q&As time

You can find these [and nearly identical older version of the same] slides at http

://agilesoftwaredevelopment.com/tags/tdd

Further contacts: http://fi.linkedin.com/in/artemmarchenko

artem.marchenko@twinelab.com

Recommended