Testing Qt Model-View Implementations Stephen Kelly – July 2010
T esting Model-View Implementations ● Designing testable code ● High-level Model-View design ● T est-drivers and mock objects ● Unit test execution ● KDE ItemViews library
T esting Model-View Implementations ● Designing testable code – Motivation
T esting Model-View Implementations ● Designing testable code – Motivation Dependency Dependency Dependency Dependency Test driver Class under test Test driver Class under test Dependency Dependency
T esting Model-View Implementations ● Designing testable code – Motivation Dependency Dependency Test driver Class under test Test driver Class under test Dependency Dependency Dependency Dependency
T esting Model-View Implementations ● Designing testable code – Motivation – Abstraction Fake Dependency Fake Dependency Test driver Class under test Test driver Class under test Fake Dependency Fake Dependency Fake Dependency Fake Dependency
T esting Model-View Implementations ● High-level Model-View design – Separation of concerns Delegate Delegate View Model View Model Selections Selections
T esting Model-View Implementations ● High-level Model-View design – Separation of concerns Delegate Delegate Object Object View Model View Model store store Selections Selections
T esting Model-View Implementations ● High-level Model-View design – Separation of concerns Delegate Delegate Fake Fake View Model Object View Model Object store store Selections Selections
T esting Model-View Implementations ● High-level Model-View design – Separation of concerns Fake Fake Test Test Model Object Model Object driver driver store store
T esting Model-View Implementations ● T est drivers and mock objects – Real-world model view EMail Model EMail Model Email view
T esting Model-View Implementations ● T est drivers and mock objects – Real-world model view Test Driver EMail Model Test Driver EMail Model
T esting Model-View Implementations ● T est drivers and mock objects – Real-world model view – Dependency injection Test Driver EMail Model Test Driver EMail Model Fake Data Fake Data
T esting Model-View Implementations ● High-level Model-View design – Separation of concerns – Abstraction View Proxy Model Proxy View Model
T esting Model-View Implementations ● High-level Model-View design – Separation of concerns – Abstraction View Proxy Model Proxy View Model
T esting Model-View Implementations ● High-level Model-View design – Separation of concerns – Abstraction View Model View Model
T esting Model-View Implementations ● T est drivers and mock objects – Real-world model view – Dependency injection View Proxy Model Proxy View Model
T esting Model-View Implementations ● T est drivers and mock objects – Real-world model view – Dependency injection – setSourceModel(new FakeModel); Test driver Proxy Fake Model Proxy Test driver Fake Model
T esting Model-View Implementations ● KDE ItemViews test suite – Fake source model (interpreter pattern) – Fake selection model – ProxyModelT est – ModelSpy
T esting Model-View Implementations ● KDE ItemViews test suite – Fake source model (interpreter pattern) – Fake selection model – ProxyModelT est – ModelSpy ● KDE ItemViews – KSelectionProxyModel – KDescendantsProxyModel – KReparentingProxyModel
T esting Model-View Implementations ● Unit test execution – Multiple executions – Configurable tests for configurable proxies – Individually executable – Re-usable
T esting Model-View Implementations ● Summary – Dependency injection – Simplify complex systems – 1,000's of tests – Re-usable – kdelibs/kdeui/tests/proxymodeltestapp
T esting Model-View Implementations Questions & Answers
Recommend
More recommend