cmake 如何为Qt项目编写Qt测试

mepcadol  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(240)

我看过QT-test website的5教程,但它们不是我想要的,我想建立一个项目,它的单元测试部分与主程序分离。
例如:在主程序中,小部件上有一个按钮,如果点击它,则Qlabel将显示一个数字。如果我运行测试程序,它将模拟该按钮上的MouseClicked事件,然后验证Qlabel上显示的值是否符合我们的预期。
我的问题是如何将测试程序链接到主程序以便访问其成员?除此之外,我想使用CMake构建项目,我应该如何为测试项目编写CMakeList?

---root 
|---test
  |----CmakeLists.txt
  |----test.cpp
  |----test.h
|---build
|----main.cpp // only int main function 
|----QMainwindows.cpp 
|----QMainwindows.h
|----QMainwindows.ui
|----CmakeLists.txt

根目录下的CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
project(myproject VERSION 0.1 LANGUAGES CXX)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
set(PROJECT_SOURCES
        main.cpp
QMainwindows.cpp 
QMainwindows.h
QMainwindows.ui
)
add_executable(myproject ${PROJECT_SOURCES})
target_link_libraries(myprojectPRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

我也很困惑在我们的测试中如何从mainwindow访问成员。我的意思是我不能包含ui_mainwindow. h并创建UI_Mainwindow示例

11dmarpk

11dmarpk1#

我找到了一种方法来回答我的问题。
在测试部分,我可以使用findchild<T>("WidgetsName")来访问任何类的ui成员。
参考:How do you get a widget's children in Qt?
这可能不是一个普遍的解决办法,如果有人有更好的主意,我将不胜感激。

相关问题