Test driving QML

18
Test-Driving QML Artem Marchenko March 15, 2011

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 on the Tampere MeeGo meetup on March 15, 2011 and text may not be super clear for those who didn't attend the meetup. You can still download the example and examine it.

Transcript of Test driving QML

Page 1: Test driving QML

Test-Driving QML

Artem MarchenkoMarch 15, 2011

Page 2: Test driving QML

Artem Marchenko

Product Manager shipping multi-

hundred MEur productsScrum Master, Practitioner, Product Owner and CoachThree times Forum Nokia

ChampionPrivate entrepreneurAvailable for hire

Product Manager, Researcher, Coach

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

Page 3: Test driving QML

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

Page 4: Test driving QML

Test-Driven Development

Remove

duplication

Page 5: Test driving QML

Example of a QML-code developed via TDD

Page 6: Test driving QML

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

Page 7: Test driving QML

Getting started 2(3)

• Create the simplest test in your project

Page 8: Test driving QML

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

Page 9: Test driving QML

Simple synchronous tests

Page 10: Test driving QML

UI level: simulating mouse click

Page 11: Test driving QML

UI level: simulating touch and drag

Page 12: Test driving QML

Asynchronous testing: tryCompare

Page 13: Test driving QML

Asynchronous testing: SignalSpy

Page 14: Test driving QML

Data-driven tests

Page 15: Test driving QML

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

2.1 Tech Preview– 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

– 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

Page 16: Test driving QML

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

Page 17: Test driving QML

Current limitations

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

other objects• 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

Page 18: Test driving QML

Thank you

Q&As time

You can find these slides at http://agilesoftwaredevelopment.com/tags/tdd