Chapter 2: Data Driven TestingFiles: In this chapter we will demonstrate how to execute a test multiple times with different test data. So far, we have hard coded the data we wanted to test into our test function. If we add more test data, the function might look like this: QCOMPARE(QString("hello").toUpper(), QString("HELLO")); QCOMPARE(QString("Hello").toUpper(), QString("HELLO")); QCOMPARE(QString("HellO").toUpper(), QString("HELLO")); QCOMPARE(QString("HELLO").toUpper(), QString("HELLO")); To prevent that the function ends up being cluttered by repetitive code, QTestLib supports adding test data to a test function. All we need is to add another private slot to our test class: class TestQString: public QObject { Q_OBJECT private slots: void toUpper_data(); void toUpper(); }; Writing the Data FunctionA test function's associated data function carries the same name, appended by _data. Our data function looks like this: void TestQString::toUpper_data() { QTest::addColumn<QString>("string"); QTest::addColumn<QString>("result"); QTest::newRow("all lower") << "hello" << "HELLO"; QTest::newRow("mixed") << "Hello" << "HELLO"; QTest::newRow("all upper") << "HELLO" << "HELLO"; } First, we define the two elements of our test table using the QTest::addColumn() function: A test string, and the expected result of applying the QString::toUpper() function to that string. Then we add some data to the table using the QTest::newRow() function. Each set of data will become a separate row in the test table. QTest::newRow() takes one argument: A name that will be associated with the data set. If the test fails, the name will be used in the test log, referencing the failed data. Then we stream the data set into the new table row: First an arbitrary string, and then the expected result of applying the QString::toUpper() function to that string. You can think of the test data as a two-dimensional table. In our case, it has two columns called string and result and three rows. In addition a name as well as an index is associated with each row:
Rewriting the Test FunctionOur test function can now be rewritten: void TestQString::toUpper() { QFETCH(QString, string); QFETCH(QString, result); QCOMPARE(string.toUpper(), result); } The TestQString::toUpper() function will be executed three times, once for each entry in the test table that we created in the associated TestQString::toUpper_data() function. First, we fetch the two elements of the data set using the QFETCH() macro. QFETCH() takes two arguments: The data type of the element and the element name. Then we perform the test using the QCOMPARE() macro. This approach makes it very easy to add new data to the test without modifying the test itself. And again, to make our test case a stand-alone executable, the following two lines are needed: QTEST_MAIN(TestQString) #include "testqstring.moc" As before, the QTEST_MAIN() macro expands to a simple main() method that runs all the test functions, and since both the declaration and the implementation of our test class are in a .cpp file, we also need to include the generated moc file to make Qt's introspection work. |
Publicité
Best OfActualités les plus luesSemaine
Mois
Année
Le blog Digia au hasardCréer des applications avec un style Metro avec Qt, exemples en QML et C++, un article de Digia Qt traduit par Thibaut CuvelierLe blog Digia est l'endroit privilégié pour la communication sur l'édition commerciale de Qt, où des réponses publiques sont apportées aux questions les plus posées au support. Lire l'article.
CommunautéRessources
Liens utilesContact
Qt dans le magazine |
Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. | Qt 4.1 | |
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD. | ||
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP ! |
Copyright © 2000-2012 - www.developpez.com