如何通过 Google 测试捕捉断言?

Posted

技术标签:

【中文标题】如何通过 Google 测试捕捉断言?【英文标题】:How to catch an assert with Google test? 【发布时间】:2011-04-14 23:02:40 【问题描述】:

我正在使用 Google 测试框架编写一些单元测试。但我想检查一些断言是否放置得当并且有用。有没有办法在 Google 测试中捕获断言?

正在测试的示例代码:

int factorial(int n)
    assert(n >= 0);
    //....

然后是测试:

#include <gtest/gtest.h>
TEST(FactorialTest,assertNegative)
    EXPECT_ANY_THROW(
         factorial(-1);
    );

但是EXPECT_ANY_THROW 没有捕获断言,而只有异常。我正在寻找捕获断言的解决方案。

【问题讨论】:

【参考方案1】:

谷歌测试提供ASSERT_DEATH, EXPECT_DEATH and other related macros。

这个问题和What are Google Test, Death Tests是彼此的答案。这是否会使它们重复或不重复? ;-)

【讨论】:

重复的答案不一定构成重复的问题。但是,您的回答本质上只是一个链接——不鼓励这样做。 我已经提到了最相关的宏的名称,这样如果链接断开,读者就有基础找到最新的文档。 移到这里:google.github.io/googletest/advanced.html#death-tests【参考方案2】:

EXPECT_FATAL_FAILURE(statement,text) 和 EXPECT_NONFATAL_FAILURE(statement,text) 将仅在 'statement' 分别调用 失败 ASSERT_x 或 EXECT_x 时通过

这些语句将在您的测试中通过:

EXPECT_NONFATAL_FAILURE( EXPECT_TRUE( 0 ), "" ); EXPECT_FATAL_FAILURE( ASSERT_TRUE( 0 ), "" );

【讨论】:

以上是关于如何通过 Google 测试捕捉断言?的主要内容,如果未能解决你的问题,请参考以下文章

Google Test -- C++单元测试框架

Google Test -- C++单元测试框架

Google Test 安装

Google Test 安装

Google Test测试框架使用(Linux平台)

如何制作混合路径道路类型? (捕捉到道路和简单的折线)Google Maps API