作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为我的 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 测试本身展示了如何做到这一点,但也经常有一些额外的并发症,只需搜索 wxUIActionSimulator
下 tests
查看其使用的许多示例。
你也可以看看this test查看如何使用 wxTEST_DIALOG
的示例测试导致模态对话框的操作,这通常会阻止 GUI 并阻止您的程序继续。
关于c++ - 如何为 wxWidgets 编写 GUI 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69832542/
我是一名优秀的程序员,十分优秀!