Ответ 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: Это не критика встроенного модульного тестирования, и это здорово, если вы можете получить его на месте с самого начала вашего проекта. Но это было большое унаследованное приложение, и было жестким требованием, чтобы я не вводил тестовый код в базовый код.