首页 > 解决方案 > 用于测试的 Qt 正确项目结构

问题描述

我目前正在为我的 Qt 项目设置 QTests,我正在努力想出一个很好的结构来满足我的需求。Atm 项目如下所示:

.
├── keygen
│   ├── main.cpp
│   ├── tests
│   │   ├── passkeygen_tests.cpp
│   │   └── tests.pri
├── common.pri
├── MainApp
│   ├── mainapp.pro
│   ├── main.cpp
├── TestProject.pro
├── lib_utils
│   ├── utils.cpp
│   ├── lib_utils.pro

TestProject 是一个子项目 pro 文件,其中包含有关 keygen(独立可执行文件)、MainApp 和 libutils(由 MainApp 使用)的信息。如您所见,我已经根据我在此示例https://github.com/kelvins/CodeCoverageExampleQt/tree/master/CodeCoverageExample中看到的内容添加了对 keygen 的测试,因为我想查看我的子项目的测试覆盖率。所以文件看起来像这样:keygen.pro:

include($$PWD/../common.pri)

QT += core dbus testlib

TEMPLATE = app
DESTDIR = $${OUT_PWD}/bin
TARGET = keygen

include($$PWD/tests/tests.pri)
QMAKE_CXXFLAGS += --coverage
QMAKE_LFLAGS += --coverage

测试.pri:

SOURCES += $$PWD/passkeygen_tests.cpp

passkeygen_tests.cpp:

#include <QtTest>

#include "passkeygenerator.h"

class PasskeygenTester : public QObject
{
    Q_OBJECT

private:
    PasskeyGenerator passkeygen;

private slots:
    void checkGeneration();
    void checkGeneration_data();

};
//Implementations
static PasskeygenTester passkeygenInstance;

#include "passkeygen_tests.moc"

从某种意义上说,当我编译项目时,我看到生成了 *.gcno 文件,但这样我就无法独立执行测试来获得实际的覆盖率。所以我的问题是生成 gcov 信息并拥有独立可执行测试的最佳方法是什么?之前的链接只关心执行测试而不是实际项目的可运行性。

我创建了一个示例项目,突出了我面临的困难,尤其是在库测试方面:https ://github.com/faxe1008/TestCoverageStructureTest

标签: c++qt

解决方案


推荐阅读