- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个子项目,我将所有 QTest
单元测试放在其中,并构建一个运行测试的独立测试应用程序(即我从 Qt Creator 中运行它)。我有多个可以使用 qExec()
执行的测试类。但是我不知道执行多个测试类的正确方法是什么。
目前我是这样做的(MVCE):
QT -= gui
QT += core \
testlib
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
TARGET = testrunner
HEADERS += test_foo.h
SOURCES += main.cpp
#include <QtTest>
#include <QCoreApplication>
#include "test_foo.h"
int main(int argc, char** argv) {
QCoreApplication app(argc, argv);
TestFooClass testFoo;
TestBarClass testBar;
// NOTE THIS LINE IN PARTICULAR.
return QTest::qExec(&testFoo, argc, argv) || QTest::qExec(&testBar, argc, argv);
}
#include <QtTest>
class TestFooClass: public QObject
{
Q_OBJECT
private slots:
void test_func_foo() {};
};
class TestBarClass: public QObject
{
Q_OBJECT
private slots:
void test_func_bar() {};
};
然而 documentation for qExec()
说这是错误的方式:
For stand-alone test applications, this function should not be called more than once, as command-line options for logging test output to files and executing individual test functions will not behave correctly.
另一个主要缺点是没有针对所有测试类的单一摘要,仅针对个别类。当我有几十个类,每个类都有几十个测试时,这是一个问题。要检查是否所有测试都通过了,我必须向上滚动以查看每个类通过/失败的所有“总计”,例如:
********* Start testing of TestFooClass *********
PASS : TestFooClass::initTestCase()
PASS : TestFooClass::test_func_foo()
PASS : TestFooClass::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestFooClass *********
********* Start testing of TestBarClass *********
PASS : TestBarClass::initTestCase()
PASS : TestBarClass::test_func_bar()
PASS : TestBarClass::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
********* Finished testing of TestBarClass *********
我也很惊讶我的qExec() || qExec()
考虑到 documentation 有效说如果测试失败 qExec()
返回一个非零值,这应该意味着以下所有 qExec()
调用都不会发生,但这似乎不是情况。
运行多个测试类的正确方法是什么?这样我就可以一眼看出我的数百个单元测试是否失败。
最佳答案
我曾经找到一个不错的solution使用普通 Qt 项目(no TEMPLATE = subdirs
),该项目使用宏方法 创建主函数并自动注册所有测试类( 宏)也只有一个简单的辅助头文件。
这是一个示例测试类(只有相关的头文件):
#ifndef FOOTESTS_H
#define FOOTESTS_H
#include "AutoTest.h"
class FooTests : public QObject
{
Q_OBJECT
private slots:
void initTestCase();
void test1();
void test2();
void cleanupTestCase();
};
DECLARE_TEST(FooTests)
#endif // FOOTESTS_H
和 main,它使用以这种方式创建的每个测试类:
#include "AutoTest.h"
TEST_MAIN
AutoTest.h
代码:
#ifndef AUTOTEST_H
#define AUTOTEST_H
#include <QTest>
#include <QList>
#include <QString>
#include <QSharedPointer>
namespace AutoTest
{
typedef QList<QObject*> TestList;
inline TestList& testList()
{
static TestList list;
return list;
}
inline bool findObject(QObject* object)
{
TestList& list = testList();
if (list.contains(object))
{
return true;
}
foreach (QObject* test, list)
{
if (test->objectName() == object->objectName())
{
return true;
}
}
return false;
}
inline void addTest(QObject* object)
{
TestList& list = testList();
if (!findObject(object))
{
list.append(object);
}
}
inline int run(int argc, char *argv[])
{
int ret = 0;
foreach (QObject* test, testList())
{
ret += QTest::qExec(test, argc, argv);
}
return ret;
}
}
template <class T>
class Test
{
public:
QSharedPointer<T> child;
Test(const QString& name) : child(new T)
{
child->setObjectName(name);
AutoTest::addTest(child.data());
}
};
#define DECLARE_TEST(className) static Test<className> t(#className);
#define TEST_MAIN \
int main(int argc, char *argv[]) \
{ \
return AutoTest::run(argc, argv); \
}
#endif // AUTOTEST_H
所有学分转到Rob Caldecott .
关于c++ - 如何运行多个 QTest 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37987301/
我正在尝试使用QTest进行一些测试。我有一个QListWidget,我想单击以获取选择。但是单击之后,什么也没有选择。有人有什么想法吗? 这是我的考试课 void TestGui::List() {
在 Qt 单元测试中,程序如何检索正在运行的测试的名称? 代码看起来像这样: #include class MyTest : public QObject { Q_OBJECT privat
我正在使用 Qt 5.3.2 的 QTest 对类执行一些单元测试。我正在使用 VS2013 Express 来构建测试器。 VS 项目文件是使用 qmake 从 .pro 文件生成的。为了运行测试,
在单元测试中,我尝试发送键盘快捷键 Command+N(在 Mac OS 上),它对应于我的应用程序中的菜单项。我正在使用 PySide.QtTest 模块。 在下面的代码中,我使用了 QTest.k
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
你能比较流行的 C++ 单元测试框架和 Qt 的 QTest 吗? (cppunit、boost 测试、google 测试等。) 有什么优点缺点?谢谢。 注意:GUI测试对我们来说不是很重要。 最佳答
我有一个子项目,我将所有 QTest 单元测试放在其中,并构建一个运行测试的独立测试应用程序(即我从 Qt Creator 中运行它)。我有多个可以使用 qExec() 执行的测试类。但是我不知道执行
我刚开始使用 QT,希望进行单元测试。我找到了支持在我的应用程序外部进行测试的项目结构蓝图。 对于我的第一个测试,我想单击“退出”菜单点,检查 QMainWindow 的关闭操作是否真的被调用。 来自
我有一个小的测试程序,它通过我编写的库与服务器后端对话。该测试使用 QTest 框架并运行了一堆测试用例。在我的所有测试运行后,最新版本的测试程序开始出现段错误。输出类似于: ********* St
我尝试使用简单的序列测试拖放:mousePress + mouseMove + mouseRelease。但它不起作用。 我调查了 qtest 源,发现通过主调度程序 processEvent() 测
首先,我知道这个论坛中有非常相似的问题。但是,没有人能真正回答我的具体情况。 我有以下项目结构: |---Project_Root |---CMakeLists.txt |---bui
我正在创建一些自动化 GUI 测试 在我的应用程序中使用 QTest . 我可以使用以下命令从我的应用程序访问小部件: savePushButton = mainWindow->findChild("
我有一个 QT 应用程序,我想用 QTest 测试它。简要介绍一下我想做什么:我有一个主窗口,按钮 Settings 位于其中。如果我点击这个按钮,就会出现 QDialog。我想测试这是否真的发生了
我想在我的代码中使用 QTest 宏 QCOMPARE,但我收到错误。 QTestString.h #ifndef QTESTSTRING_H #define QTESTSTRING_H #inclu
这是我的代码: from PySide import QtCore, QtGui, QtTest import sys application = QtGui.QApplication(sys.arg
我正在使用 Qt 中的 QTest 编写一些单元测试。我还遇到了 QBENCHMARK 宏,它对其封装的代码进行基准测试。 我正在运行我的单元测试并对一些代码进行基准测试。 QBENCHMARK 报告
我第一次在 QtCreator 中进行单元测试,我想知道如何测试没有返回类型的函数。喜欢: rgb_process.h: class RGB_process : Process { public:
我对 Qt 很陌生,我需要使用 QTest 模拟点击命名空间和 QTest::mouseClick .我的问题是我想点击 QMenu条目,定义为 QAction ,但 mouseClick函数不允许我
我正在使用 QTestLib framework 在 QTableView 中为自定义验证器编写单元测试。最基本的测试用例之一可以这样描述: Double click the table cell i
我正在使用 QTestLib 库和 QTest 来运行我的单元测试。我在 Windows 7 上工作,并使用 Qt 4.8 和 MVSC 2010 编译器。当我使用以下方式运行测试时: QTest::
我是一名优秀的程序员,十分优秀!