【发布时间】:2021-12-18 06:52:52
【问题描述】:
我想为我的 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 测试本身?
【问题讨论】:
标签: c++ unit-testing wxwidgets catch2