如何用Microsofts单元测试框架处理失败的断言和中止调用?

问题描述 投票:0回答:1

我刚刚从我的catch2测试框架转移到Microsofts原生代码C++单元测试框架,以便更好地集成到IDE中。

但是我的编码风格是在代码中使用大量的断言语句,我不能用宏调用代替它们。我不能用像AssertIfTrue这样的宏调用来代替它们,否则就会因为对框架的依赖而使整个代码库中毒。

但是如果一个断言失败,单元测试运行器就会停止并弹出消息框,当我按下中止按钮时,测试将被报告为跳过而不是失败。这对于任何自动化的持续集成生命周期来说都是不可能的行为。

我已经尝试通过 signal(SIGABRT, SignalHandler); 但该处理程序从未被调用。使用_set_abort_behavior来禁用消息框,并使用 _set_abort_behavior( 0, _WRITE_ABORT_MSG); 也没有结果。

c++ c visual-studio unit-testing assert
1个回答
0
投票

好吧,我在浏览了源代码后找到了解决方案,这个片段必须在运行代码前放在一些初始化例程中。

#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);
}
© www.soinside.com 2019 - 2024. All rights reserved.