Как обрабатывать неудачные утверждения и прерывать вызовы с помощью модульного тестирования Microsoft? - PullRequest
0 голосов
/ 23 апреля 2020

Я только что перешел с моей среды тестирования catch2 на платформу модульного тестирования нативного кода C ++ от Microsoft для более удобной интеграции в IDE.

Но мой стиль кодирования - использовать множество утверждений assert по всему коду. Я не могу заменить их вызовами макросов, такими как вызовы AssertIfTrue, не отравляя всю кодовую базу зависимостями от каркаса.

Но если проверка не удалась, модуль модульного теста останавливается с всплывающим окном сообщения, и когда я нажимаю кнопку отмены, тест будет объявлен пропущенным, а не неудачным. Это также выглядит как невозможное поведение для любого жизненного цикла автоматической непрерывной интеграции.

Я уже пытался установить обработчик сигнала через signal(SIGABRT, SignalHandler);, но обработчик никогда не вызывается. И использование _set_abort_behavior для отключения окна сообщения с _set_abort_behavior( 0, _WRITE_ABORT_MSG); также не даст результата.

1 Ответ

0 голосов
/ 23 апреля 2020

Хорошо, я нашел решение после перехода по исходному коду. Этот фрагмент должен быть вставлен в некоторую процедуру инициализации перед запуском кода.

#include "CppUnitTest.h"

static void my_abort_function(int signo) {
    Microsoft::VisualStudio::CppUnitTestFramework::Assert::IsTrue(false);    
}

void initialize() noexcept {    
    _set_error_mode(_OUT_TO_STDERR);
    _set_abort_behavior(0, _WRITE_ABORT_MSG);
    signal(SIGABRT, my_abort_function);
}
...