gpt4 book ai didi

c++ - 如何为 wxWidgets 编写 GUI 测试

转载 作者:行者123 更新时间:2023-12-04 14:47:05 25 4
gpt4 key购买 nike

我想为我的 C++ wxWidgets 应用程序创建一个测试套件,但在弄清楚如何测试 GUI 组件时遇到了麻烦。 article in the docs关于如何编写单元测试是从扩充现有单元测试的角度编写的,但没有解决如何开始新的单元测试。
我能够使用 Catch 创建一个测试套件(这似乎是推荐的方法)但在 GUI 端入门时遇到问题。
在非 GUI 方面,我创建了一个如下所示的测试

#include "catch.hpp"

#include "wx/wx.h"

TEST_CASE("wx", "[wx]") {
wxPoint p = wxPoint(10, 10);
REQUIRE(p.x == 10);
}
和一个看起来像这样的 CMakeLists 文件(只是相关部分):
set(CATCH_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/wxWidgets/3rdparty/catch/include/)
add_library(Catch INTERFACE)
target_include_directories(Catch INTERFACE ${CATCH_INCLUDE_DIR})

# Make test executable
set(TEST_SOURCES
test.cpp
)
add_executable(tests ${TEST_SOURCES})
target_link_libraries(tests Catch ${wxWidgets_LIBRARIES})
这工作得很好。所以链接 wxWidgets 库没有问题。我相信问题在于创建 wxApp 或事件循环。但我不确定如何纠正。
当我创建一个尝试创建按钮的测试时(如文档中建议用作示例的 buttontest.cpp),我收到一个 Segmentation violation signal .
TEST_CASE("wx", "[wx]") {
wxButton* button = new wxButton(wxTheApp->GetTopWindow(), wxID_ANY, "wxButton");
wxYield();
}
有没有地方可以演示如何从头开始为 wxWidgets 创建 GUI 测试,而不仅仅是添加到 wxWidgets 测试本身?

最佳答案

不幸的是,编写 GUI 测试不是很简单,但可以做到。基本思想是你使用 wxUIActionSimulator触发您要测试的用户操作,然后检查 UI 是否已按预期更新,这通常涉及调用 wxYield()让所有事件都得到处理。 wxWidgets 自己的 GUI 测试本身展示了如何做到这一点,但也经常有一些额外的并发症,只需搜索 wxUIActionSimulatortests查看其使用的许多示例。
你也可以看看this test查看如何使用 wxTEST_DIALOG 的示例测试导致模态对话框的操作,这通常会阻止 GUI 并阻止您的程序继续。

关于c++ - 如何为 wxWidgets 编写 GUI 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69832542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com