如何通过 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 测试捕捉断言?的主要内容,如果未能解决你的问题,请参考以下文章