Испытание Gui в Qt

Я пытаюсь запустить приложение gui, и я не слишком уверен, как это сделать. Сначала у меня есть приложение, в котором расположены все функции gui и helper. У меня также есть две внешние библиотеки, которые я создал, которые использует это приложение. Библиотеки выполняют только мелкие вещи, и я хотел бы unit test эти части, когда QtMock работает и работает (в настоящее время он не совместим с qt 4.8 по какой-то причине).

Я бы хотел подчеркнуть основное приложение, не меняя слишком много кода. Я взглянул на QtTestLib, и это казалось очень простым, и, как будто вам нужно было интегрировать этот код с основным кодом, который я не хочу. Я бы действительно хотел проверить тестирование вне приложения и задавался вопросом, как это сделать? Не слишком уверен, что я должен экспортировать мое enitre gui app в качестве внешней библиотеки, которую я мог бы импортировать в свой тест?

Как вы обычно это делаете, чтобы действительно стресс протестировал все это. Не знаю, как и где я должен сделать тестовый код, и я был бы признателен за любую помощь!

Ответы

Ответ 1

По моему опыту, любой тестовый инструментарий, который вы используете, либо будет работать в вашем коде тонким образом, либо никогда не дойдет до нужной вам глубины (или того и другого).

Можно написать собственный тестовый код и по-прежнему держать код в чистоте для тестируемого приложения. Я сделал это на большом графическом приложении Windows С++, которое мне нужно было автотестировать. Основная идея состоит в том, чтобы создать новый проект, указать весь код из вашего базового проекта и написать новый набор классов, которые происходят из базовых классов и содержат ваш тестовый код.

В моем случае я создал новый проект Visual Studio, но вы можете сделать то же самое с новым проектом Qt. Разумеется, базовые классы, возможно, придется реорганизовать, чтобы разоблачить проверенные функции. Тестовые классы при необходимости называют функции базового класса - вы можете создать весь тестовый gui, если хотите.

В качестве очень простого примера, если это ваш проект...

class MyView : public QMainWindow {}
class MyController {}
class MyModel {}

... создайте новый проект, потяните в свой базовый код и добавьте следующее:

class TestView       : public MyView {}
class TestController : public MyController {}
class TestModel      : public MyModel {}

В конце концов, после небольшой работы нулевой тестовый код был в моих базовых классах, и я все еще был в состоянии связать всевозможные повторяющиеся автотесты в хорошем тестовом gui и устранить их.

Я не говорю, что это простая или тривиальная задача. Я просто ободряю вас, что это можно сделать.: -)

EDIT: Это не критика встроенного модульного тестирования, и это здорово, если вы можете получить его на месте с самого начала вашего проекта. Но это было большое унаследованное приложение, и было жестким требованием, чтобы я не вводил тестовый код в базовый код.