如何使用googletest失败作为断点

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

我最近使用命令行选项 gtest_break_on_failure 或通过定义 GTEST_BREAK_ON_FAILURE 环境变量从 googletest 发现了 Failures into Break-Points - option

我使用 gtest_break_on_failure 进行了尝试。从命令行,我没有看到任何效果(说实话,我隐约看到希望 VS2010 会被注册为调试器,并且会神奇地弹出并指向错误源)。

在 VS 环境中使用它作为命令行参数,失败的断言触发了中断,但调用堆栈不包含导致失败的测试方法。我找到了解决步骤(F10)的方法,直到达到我的测试代码,但这似乎并不方便。

是否可以通过命令行使用该选项?

有人建议如何在环境中获取正确的调用堆栈吗?

c++ visual-studio unit-testing debugging googletest
2个回答
42
投票

在 VS 中,您可以将

--gtest_break_on_failure
添加到目标属性页中的命令参数,然后只需运行 exe,无需跳过。

Property Pages showing Command Arguments

从命令行,您应该能够使用标志

--gtest_break_on_failure --gtest_catch_exceptions=0
运行调试可执行文件,这应该允许您在测试失败时闯入 MSVC 调试器。


0
投票

以下是如何在调试器下运行测试时自动启用

break_on_failure
googletest
在 gtest_main.cc 中带有自己的
main
入口点,可以修改它或将您自己的 main 添加到测试项目中来覆盖默认行为。

这是我添加的更改:

#include "gtest/gtest.h"
#include <windows.h>

GTEST_API_ int main(int argc, char** argv)
{
#ifdef _WIN32
    if (IsDebuggerPresent())
        testing:: GTEST_FLAG(break_on_failure) = true;
#endif
    //printf("Running main() from %s\n", __FILE__);
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

具体来说,如果

IsDebuggerPresent
,ifdef 为
_WIN32
的部分会自动设置 break_on_failure GTEST_FLAG。

© www.soinside.com 2019 - 2024. All rights reserved.