Test-Driving QML
Artem MarchenkoMarch 15, 2011
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
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
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
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• 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
Thank you
Q&As time
You can find these slides at http://agilesoftwaredevelopment.com/tags/tdd