我刚刚开始一个需要一些跨平台GUI的新项目,我们选择了Qt作为GUI框架.
我们也需要一个单元测试框架.直到大约一年前,我们使用内部开发的C++单元测试框架 - 项目,但我们现在正在转向使用Google Test进行新项目.
有没有人有使用Google Test for Qt-applications的经验?QtTest/QTestLib是更好的选择吗?
我仍然不确定我们想在项目的非GUI部分使用Qt多少 - 我们可能更喜欢在核心代码中使用STL/Boost,并使用基于Qt的GUI的小接口.
编辑:看起来很多人都倾向于QtTest.是否有任何人有经验将其与连续集成服务器集成?此外,在我看来,必须为每个新测试用例处理单独的应用程序会导致很多摩擦.有什么好方法可以解决这个问题吗?Qt Creator是否有一个处理此类测试用例的好方法,或者您是否需要为每个测试用例创建一个项目?
我得到了我的Qt项目,我正在使用Qt Creator.我想对我的所有代码进行单元测试.
但是我在QTestLib框架上相当新,但是每个人都推荐它用于测试基于Qt的源代码.现在我有点困惑如何用app项目构建测试项目.
在这种情况下,你们如何管理测试代码?谢谢.
我正在编写一个模拟其他应用程序按键的测试应用程序.对于每次按键,我都要检查是否显示了正确的窗口/窗体.所以我所做的就是显示窗口的指针并获得它的窗口标题.但是,并非所有窗口/窗体都显示窗口标题.所以我认为最好得到类的名称.我怎样才能得到班级的名字?
QWidget *pWin = QApplication::activeWindow();
Run Code Online (Sandbox Code Playgroud)
当我尝试:
pWin->className();
Run Code Online (Sandbox Code Playgroud)
得到班级的名字,我得到:
"错误:类QWidget没有名为'className'的成员"
有人能告诉我正确的方法吗?
我正在通过Qt的KeyPress函数模拟应用程序的keyPresses.所有的KeyPress工作正常.但是,当我传递一个QT::Key_Enter
应该按下当前活动窗口的OK按钮或QT::Key_Cancel
取消按钮时,它什么都不做.
我想也许,因为这些按钮没有焦点,父窗口本身就有了它.你怎么得到窗户的孩子?或者更确切地说,在其上找到OK或Cancel按钮,以便将其设置为activeWindow,然后成功传递KeyPresses?
我有:
QWidget *pWin = QApplication::activeWindow;
QObjectList *pList = pWin->children();
//how do you iterate through the list and find the OK or Cancel button?
Run Code Online (Sandbox Code Playgroud) 我有一个子项目,我将所有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
Run Code Online (Sandbox Code Playgroud)
#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);
}
Run Code Online (Sandbox Code Playgroud)
#include <QtTest>
class TestFooClass: public QObject
{
Q_OBJECT
private slots: …
Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用QTestLib.我已经阅读了手册和教程.虽然我理解如何创建测试,但我还没有得到如何使这些测试方便运行.我的单元测试背景是NUnit和MSTest.在这些环境中,只需单击右键,就可以在运行单个测试或单个测试类中的所有测试或整个项目中的所有测试之间切换(至少使用GUI).
我在QTestLib中看到的就是你使用QTEST_MAIN
宏在一个类中运行测试,然后分别编译和测试每个文件; 或用QTest::qExec()
在main()
定义哪些对象进行测试,然后手动更改,当你想添加/删除测试类重新编译.
我确定我错过了什么.我希望能够轻松地:
其中任何一个都会调用相应的设置/拆卸功能.
编辑:赏金现在可用.必须有更好的方法,或者为您或其他东西处理它的GUI测试运行器.如果您在测试驱动的环境中使用QtTest,请告诉我您的工作原理.(脚本,测试跑步者等)
我正在尝试将Jenkins xUnit插件用于我的Qt单元测试项目,但我无法使其工作......
这是我到目前为止所做的:
首先,我使用qmakebuilder插件构建我的单元测试项目(将.pro提供给qmakebuilder插件),然后我添加一个Execute Shell
构建部分,我首先rm -f
使用testResult xml文件,然后运行测试带有-xunitxml
标志的二进制文件让它为我生成xml文件我用xml文件命名testResult.xml
,换句话说:
rm -f /home/guest/QT/unitTest/testResult.xml
cd /home/guest/QT/unitTest
./tst_unittesttest -xunitxml > testResult.xml
Run Code Online (Sandbox Code Playgroud)
最后在Post Build Action中,我选择Publish xUnit test result
并指定模式为*.xml
.
但是构建作业会失败,这是我使用Jenkins构建作业时获得的输出:
[xUnit] [INFO] - Starting to record.
[xUnit] [INFO] - Processing QTestlib-Version N/A
[xUnit] [INFO] - [QTestlib-Version N/A] - 1 test report file(s) were found with
the pattern '*.xml' relative to '/home/guest/QT/unitTest' for the testing framework
'QTestlib-Version N/A'.
[xUnit] [ERROR] - The converted file for the …
Run Code Online (Sandbox Code Playgroud) 我在QT C++世界中说过.我正在使用QTest类进行TDD.我想验证在某些情况下我的类正在测试中抛出异常.使用谷歌测试,我会使用类似的东西:
EXPECT_THROW(A(NULL), nullPointerException);
Run Code Online (Sandbox Code Playgroud)
QTest中是否存在类似此功能的内容?O至少有办法吗?
谢谢!
我试图在QMenuBar上模拟鼠标点击QMenu项目,例如使用QTestLib框架单击"另存为"QAction.
我在Windows XP 32位和Qt 5.0.2下使用它.
有任何想法吗?
用例是,我有一个Qt应用程序,我想自动进行用户式测试; 也就是说,我想使用keyClicks(),mouseClick()等,但我想在发生这种情况时实际显示Qt应用程序窗口.
我现在遇到的问题是使用QTestLib涉及使用QTEST_MAIN宏而不是自己定义main,所以我永远不会有机会展示()正在测试的小部件.所以,另一种说出这个问题的方法是,有没有办法在使用其主要功能的应用程序上使用QTestLib?
我知道Squish和可能的Testability Driver都能做到这一点,但如果可以在不使用额外工具的情况下获得此功能,那么这将是理想的选择.
qt ×10
qtestlib ×10
unit-testing ×5
c++ ×4
qttest ×3
classname ×1
googletest ×1
gui-testing ×1
jenkins ×1
keypress ×1
qmenu ×1
widget ×1