标签: qttest

我应该为Qt使用什么单元测试框架?

我刚刚开始一个需要一些跨平台GUI的新项目,我们选择了Qt作为GUI框架.

我们也需要一个单元测试框架.直到大约一年前,我们使用内部开发的C++单元测试框架 - 项目,但我们现在正在转向使用Google Test进行新项目.

有没有人有使用Google Test for Qt-applications的经验?QtTest/QTestLib是更好的选择吗?

我仍然不确定我们想在项目的非GUI部分使用Qt多少 - 我们可能更喜欢在核心代码中使用STL/Boost,并使用基于Qt的GUI的小接口.

编辑:看起来很多人都倾向于QtTest.是否有任何人有经验将其与连续集成服务器集成?此外,在我看来,必须为每个新测试用例处理单独的应用程序会导致很多摩擦.有什么好方法可以解决这个问题吗?Qt Creator是否有一个处理此类测试用例的好方法,或者您是否需要为每个测试用例创建一个项目?

qt unit-testing googletest qttest qtestlib

47
推荐指数
5
解决办法
3万
查看次数

如何在QTestLib对Qt app进行单元测试时构建项目

我得到了我的Qt项目,我正在使用Qt Creator.我想对我的所有代码进行单元测试.
但是我在QTestLib框架上相当新,但是每个人都推荐它用于测试基于Qt的源代码.现在我有点困惑如何用app项目构建测试项目.

  1. 我可以将所有源代码和测试代码放在同一个项目中吗?如果是这样,我怎么能管理它们?我没有找到任何让我在一个项目中启动app或开始测试的选项.
  2. 如果我将应用程序源代码和测试代码放在单独的项目中,测试项目将引用应用程序项目,这不太方便.
  3. 对于需要测试的类的批量,我如何管理测试代码?

在这种情况下,你们如何管理测试代码?谢谢.

qt unit-testing qttest qtestlib

36
推荐指数
3
解决办法
1万
查看次数

使用CMake构建Qt测试

任何人都可以给我一些QT测试代码的例子和一个用Cmake构建并与CTest一起运行的CMakeLists.txt.我好像找不到任何东西!

-Kurtis

qt cmake ctest qttest

23
推荐指数
2
解决办法
9824
查看次数

Qt:从多个测试类中运行单元测试,并总结所有测试类的输出

Qt附带QTest,并且有一些文档:例如,官方教程.

但是,QTest鼓励您将单元测试组织为单独的可执行文件.有一个特殊的宏,它生成main():QTEST_MAIN()

说实话,我真的不喜欢这种方法:通常,一次运行所有测试更有用,以确保最近的更改没有破坏任何东西.有时,屏蔽某些测试或执行某些单独测试很有用,但这是一个例外,而不是规则.

所以,我想立刻运行所有测试.好的,我可以编写自己的main(),执行我想要的所有测试,比如说:

int main(int argc, char **argv)
{
   int status = 0;

   //-- run all tests
   {
      TestHTCodecISO14230 tc;
      status |= QTest::qExec(&tc, argc, argv);
   }

   {
      TestHTDataMsg tc;
      status |= QTest::qExec(&tc, argc, argv);
   }

   return status;
}
Run Code Online (Sandbox Code Playgroud)

它确实运行所有测试,但问题是我没有方便的所有测试摘要.比如说,对于上面的两个测试,我有两个单独的摘要:

********* Start testing of TestHTCodecISO14230 *********
Config: Using QtTest library 5.4.1, Qt 5.4.1 (i386-little_endian-ilp32 shared (dynamic) release build; by GCC 4.6.1)
PASS   : TestHTCodecISO14230::initTestCase()
PASS   : TestHTCodecISO14230::decode_summary() …
Run Code Online (Sandbox Code Playgroud)

c++ qt unit-testing qttest

15
推荐指数
1
解决办法
2195
查看次数

QtTest单元测试,如何添加位于另一个项目中的头文件?

也许我错过了一些东西,但对我而言,提供QtTest框架的唯一教程让你测试QString类似乎真的很愚蠢.

单元测试的典型用例是....你自己编写的测试类,但没有提到如何在教程中测试不同项目中的类以进行测试,谷歌也让我失望(我真的怀疑复制粘贴类是一种很好的方法).

我甚至翻阅了3本不同的Qt书籍而没有提及QtTest.

c++ qt unit-testing qt-creator qttest

13
推荐指数
2
解决办法
5379
查看次数

使用Qt的QTestLib模块进行测试

我开始用Qt的单元测试系统编写一些测试.

你通常如何组织测试?它是每个模块类的一个测试类,还是用单个测试类测试整个模块?Qt文档建议遵循前一策略.

我想为模块编写测试.该模块只提供了一个将由模块用户使用的类,但是除了测试公共类之外,还有很多其他类中抽象的逻辑,我也想测试它们.

问题是Qt提出的运行测试的方法涉及到QTEST_MAIN宏:

QTEST_MAIN(TestClass)
#include "test_class.moc"
Run Code Online (Sandbox Code Playgroud)

最终,一个测试程序只能测试一个测试类.为模块中的每个类创建测试项目有点糟糕.

当然,人们可以看看QTEST_MAIN宏,重写它,并运行其他测试类.但有什么东西可以开箱即用吗?

到目前为止,我手工完成:

#include "one.h"
#include "two.h"

int main(int argc, char *argv[]) 
{ 
    QCoreApplication app(argc, argv); 
    TestOne one;
    QTest::qExec(&one, argc, argv);
    TestOne two;
    QTest::qExec(&two, argc, argv);
}
Run Code Online (Sandbox Code Playgroud)

qt unit-testing qttest

12
推荐指数
3
解决办法
1万
查看次数

Qt Quick的单元测试

我是Qt和Qt Quick的新手.我正在验证Qt Quick的Qt测试单元测试框架,我无法理解如何运行测试.这就是我所拥有的,我创建了一个具有以下结构的SUBDIRS项目:

ProjectSolution
   ProjectSolution.pro
   Project
      Project.pro
      Sources/main.cpp
      Resources/qml.qrc/main.qml
   ProjectTest
      ProjectTest.pro
      Sources/main.cpp
      Resources/qml.qrc/main.qml
      Resources/qml.qrc/tst_gui.qml
Run Code Online (Sandbox Code Playgroud)

"Project"是要测试的应用程序,我的测试用例位于"ProjectTest/Resources/qml.qrc/tst_gui.qml"中.

tst_gui.qml:

import QtQuick 2.5
import QtTest 1.0

TestCase {
    name: "UI Testcase"
    when: windowShown

function test_button_click() {
    mouseClick(click_button, Qt.LeftButton, Qt.NoModifier)
}

function test_key_press() {
    keyClick(Qt.Key_Left)
    keyClick("a")
    }
}
Run Code Online (Sandbox Code Playgroud)

我在"Project/Resources/qml.qrc/main.qml"中有一个ID为"click_button"的Button,我想模拟它.当我运行测试项目时,我收到消息失败:

FAIL!  : tst_gui::UI Testcase::test_button_click() Uncaught exception: click_button is not defined
C:\Users\sjayaprakash\Qt Test Projects\Qt Test Validation\QtTestValidation6\QtTestValidation6Test\tst_gui.qml(9) : failure location
Run Code Online (Sandbox Code Playgroud)

我确信我做错了什么.有人可以帮忙吗?

qt unit-testing qttest qml

9
推荐指数
1
解决办法
2161
查看次数

QTestLib是否可以在运行时显示正在测试的GUI?

用例是,我有一个Qt应用程序,我想自动进行用户式测试; 也就是说,我想使用keyClicks(),mouseClick()等,但我想在发生这种情况时实际显示Qt应用程序窗口.

我现在遇到的问题是使用QTestLib涉及使用QTEST_MAIN宏而不是自己定义main,所以我永远不会有机会展示()正在测试的小部件.所以,另一种说出这个问题的方法是,有没有办法在使用其主要功能的应用程序上使用QTestLib?

我知道Squish和可能的Testability Driver都能做到这一点,但如果可以在不使用额外工具的情况下获得此功能,那么这将是理想的选择.

c++ qt gui-testing qttest qtestlib

8
推荐指数
1
解决办法
1366
查看次数

如何在使用单个测试项目时将所有QtTestLib单元测试结果组合在一个文件中?

在我们的项目中,我们使用QtTestLib进行单元测试.原因是整个项目在可能的情况下已经使用Qt并且它是一个GUI应用程序,因此我们希望能够测试GUI界面.

我们的项目是由MSVC编译的,所以我们不希望每个测试都有一个单独的项目文件,因为它会使解决方案变得混乱.因此,我们为所有测试创建了一个项目.所有测试都应该在CIS上自动进行(持续集成),因此我们尝试使用一些XSLT转换通过XML格式的输出文件将测试插入Hudson.

但似乎测试输出存在问题.如果对所有测试使用单个main(),并且仅向每个测试传输cmd行参数:

#include "MyFirstTest.h"
#include "MySecondTest.h"

int main(int argc, char **argv)
{
  int result = 0;
  MyFirstTest test1;
  result |= QTest::qExec(&test1, argc, argv);
  MySecondTest test2;
  result |= QTest::qExec(&test2, argc, argv);
  return result;
}
Run Code Online (Sandbox Code Playgroud)

然后你会得到一个多次重写的结果文件.因此,如果您想使用输出文件(例如xml)稍微自动化它,您将只获得其中的最后结果.所有其他都将被覆盖.

我们已经尝试过这种方法,它不能让你使用像Hudson这样的连续集成系统.所以我的问题是:有没有机会在一个输出文件中附加结果?当然,我们可以使用一些解决方法,例如通过QTest :: qExec()运行每个测试,并使用修改后的参数将结果写入单独的文件,但这似乎不是最好的方法.理想情况下,我希望有一个结果文件与CIS一起使用.

c++ qt qttest qtestlib

6
推荐指数
1
解决办法
2653
查看次数

如何创建Qt-Quick测试

我必须创建一个单元测试.

但首先,我要弄明白该做什么.有一个QtQuick2-App编写,现在我想用GUI进行单元测试.使用GUI进行单元测试的步骤是什么?阅读Qt文档后,我无法创建任何从测试开始的想法.

希望有人可以帮助我.

编辑:我是能够运行一些测试,加入后tst_button.qmltst_test.cpp我的项目(main.cpp中是评论现在).这是正确的方法,还是应该为测试创建一个新项目?如果是,需要什么样的项目?最后一个问题:MainForm例如,我是否需要建立我的按键?

tst_button.qml

import QtQuick 2.4
import QtTest 1.0

Rectangle{
    id: myRec
    property var myMainForm: null

    TestCase{
        name:"ButtonClick"
        when:windowShown

        function test_init(){
           var createMyWindow = "import QtQuick 2.0; MainForm{id:myForm}"
           var myMainForm = Qt.createQmlObject(createMyWindow,myRec)
            myRec.myMainForm = myMainForm
        }
      }
  }
Run Code Online (Sandbox Code Playgroud)

tst_test.cpp

#include <QtQuickTest/quicktest.h>
QUICK_TEST_MAIN(test)
Run Code Online (Sandbox Code Playgroud)

user-interface qttest qml qtquick2

6
推荐指数
1
解决办法
2956
查看次数