Как использовать Catch2 для запуска из приложения wxWidgets

#visual-c #visual-studio-2019 #wxwidgets #catch2

#visual-c #visual-studio-2019 #wxwidgets #catch2

Вопрос:

После недавнего знакомства с Catch2 я бы очень хотел использовать его для тестирования некоторых функций проекта wxWidgets. Все простые примеры, которые я видел, выполняются в основном как консольное приложение. Другие, которые я видел, используются для создания экземпляра и тестирования полного класса. Есть несколько примеров, которые показывают, как настроить все, чтобы позволить пользователю создавать свою собственную функцию main (), но я не нашел примера, который показывает мне, как включить работы в мое приложение.

Я думаю, мне нужно найти способ, чтобы я мог передать указатель на класс main frame, который позволил бы мне тестировать функции-члены.

Если бы я мог также запустить тест из меню или панели инструментов и, надеюсь, получить выходные данные для ведения журнала или отображения в графическом интерфейсе, это было бы еще лучше.

На данном этапе у меня вообще нет рабочего кода. Хотя я просмотрел тесты в дистрибутиве wxWidgets для версии 3.1.3 и нашел некоторое применение Catch2, но ничего из того, что я смог найти, не охватывает то, что, как я думаю, мне нужно.

Запуск с wxWidgets 3.1.3 под управлением Win 10 и с использованием MSVC 2019

Ответ №1:

Не совсем понятно, о чем вы спрашиваете, но собственный набор модульных тестов wxWidgets использует CATCH (хотя v1, а не v2, но они достаточно похожи, чтобы это не имело значения), и вы можете видеть, как он использует wxUIActionSimulator для эмуляции действий пользователя.

Комментарии:

1. Мой поиск по тестам wxWidgets показал, что Catch использовался для тестирования отдельных классов wxWidgets. В моем случае, хотя это и не совсем устаревший код, «бизнес-» логика обычно содержится в функциях, которые являются членами класса main frame. Следовательно, для тестирования этих функций, не превращая их в какие-то внешние C-подобные функции, кажется, что им понадобится указатель на основной фрейм, чтобы их можно было вызывать напрямую. В другом предыдущем проекте, несколько лет назад (с использованием CppUnit amp; wxTestRunner), это было выполнено с использованием глобального указателя на основной фрейм

2. Конечно, вам нужно создать свой основной фрейм, но это само собой разумеется. Как только это будет сделано, вы можете использовать wxUIActionSimulator , например, для выбора соответствующих пунктов меню и проверки того, что они приводят к ожидаемым результатам.

3. Мне придется попробовать.

4. Итак, я добавляю пункты меню UT в свой основной фрейм, и обработчики для них могут затем использовать TEST_CASE amp; REQUIRE? Предполагая, конечно, что вы настроили все соответствующим образом для Catch2, не заставляя Catch2 генерировать свой собственный main.

5. Обычно я бы тестировал обычные пункты меню, если вы добавляете специальные пункты меню, я не вижу, чем это лучше, чем просто извлечь функцию для тестирования и вызвать ее напрямую.