test driving qml
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
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