2015-03-23 2 views
2

У меня довольно большой проект GUI GUI, который, к сожалению, не имеет надлежащих модульных тестов.Проект модуля большой Qt

Я планирую иметь тестовый проект с тестовым исходным файлом для каждого класса.

Я выкопал через много официальной документацию Qt, однако есть некоторые вопросы остаются:

  • Как я могу создать набор тестов? Кажется, что все документы и учебники охватывают только одно тестовое задание, но как я могу эффективно объединить мои модульные тесты?
  • Как я могу интегрировать выполнение теста в Qt Создатель? Может быть, запуск тестов поэтапно будет интересным?
  • Должен ли я добавить все обычные исходные файлы в тестовый проект или есть способ создать статический lib?

Любые указатели на учебные пособия, содержащие подсказки для тестирования более крупного проекта Qt, высоко ценятся.

ответ

2

У меня не было много времени, чтобы сделать идеальное модульное тестирование в Qt. Однако я выяснил, как получить основную работу сантехники. Я надеюсь, что это может вам помочь, хотя вы, вероятно, могли бы сделать лучше, чем я, изучив Writing Unit Tests guide.

Как создать набор тестов? Кажется, что все документы и учебники охватывают только одно тестовое задание, но как я могу эффективно объединить мои модульные тесты?

Вы можете организовать «сюиты», собирая единичные тесты (которые представляют собой слоты на объектах) в объекты и составляют эти объекты.

test_example.pro

TARGET = test_example 
TEMPLATE = app 
CONFIG += testcase 
QT += testlib core 

... INCLUDEPATH, SOURCES, HEADERS, etc... 

main.cpp

#include <QtTest/QtTest> 
#include "MainTest.h" 

// This macro introduces an event loop 
QTEST_MAIN(MainTest) 

MainTest.h

class MainTest : public QObject 
{ 
    Q_OBJECT 

private slots: 

    // Each slot is a unit test 
    void init() 
    { 
    } 

    // Create a "test suite" by bundling tests into objects 
    void runFirstSuite() 
    { 
    FirstSuiteUiTest first; 
    first.test(); // runs 10 tests 

    FirstSuiteIoTest second; 
    second.test(); // runs 999 tests 

    ... 
    } 

    void SecondSuite() 
    { 
    QFAIL("This suite is not really a suite, and it always fails"); 
    } 
}; 

Вы можете также орган ize в физических файловых структурах. Я использовал проект subdirs в качестве моего корневого файла .pro, чтобы я мог создавать артефакты (динамические и статические архивы, двоичные файлы) и запускать множество коллекций модульных тестов.

TEMPLATE = subdirs 
CONFIG += ordered 

SUBDIRS += src/core 
SUBDIRS += src/some_dll 
SUBDIRS += src/test/awesome_core_test_1 #Holds many suites 
SUBDIRS += src/test/awesome_core_test_2 #Holds many other suites! 

core.depends = core 
awesome_core_test_1.depends = core 
awesome_core_test_2.depends = core 

Таким образом, организуя единичные тесты в композициях объектов и физических файлах, вы можете определить степень детализации организации. Там могут быть лучшие или разные способы, но я не уверен.

Как я могу интегрировать выполнение теста в Qt Creator? Может быть, запуск тестов поэтапно будет интересным?

Добавить CONFIG += testcase в ваш .pro файл. Это создает цель сборки. Вызвать сборку и испытания с помощью запуска make check

Следует ли добавить все нормальные исходные файлы в тестовый проект или есть способ создать статическую библиотеку?

Вы можете сделать это, как и в любом другом проекте.

0

Как создать набор тестов? Кажется, что все документы и учебники охватывают только одно тестовое задание, но как я могу эффективно объединить мои модульные тесты?

В модуле «Класс испытаний Qt» каждый отдельный слот является единичным тестом. Не существует других стандартных способов добавления новых тестов, но существует не документальная функция qmake. Вы можете прочитать о: in this forum thread

Как интегрировать выполнение теста в Qt Creator? Может быть, запуск тестов поэтапно будет интересным?

Вы можете добавить проект проверки CONFIG + = testcase, и это приведет к созданию дополнительной целевой цели - проверки. Конечно, вы можете добавить этот шаг сборки в любом месте. Кроме того, вы можете прочитать здесь - Writing_Unit_Tests

Должен ли я добавить все нормальные исходные файлы тестового проекта или есть способ создать статическую LIB?

Вы можете создать статический или динамический LIB с источниками и связать их, чтобы проверить проект, или вы можете добавить источники для тестирования проекта, как here

Кстати, вы можете посмотреть пример модульного тестирования с Qt here

+0

Это правильный ответ. Я бы добавил только возможность включить файлы библиотеки в тестовый проект (например, выполняя 'SOURCES + = ../ lib/* cpp') в качестве альтернативы тестированию библиотечного API. –

+2

'В модульном тестовом классе Qt каждый отдельный слот - это единичный тест' - скажите, что? – dtech

+0

@ddriver добавил котировки. Спасибо. – Milovidov

Смежные вопросы