GoogleTest框架 使用总结【二】

18.2.25一次整理
原文:

https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md


显式(Explicit)测试成功&失败

主要命令如下:

SUCCEED();//当前版本无作用,无任何输出
FAIL();//立刻停止当前测试,并输出错误
ADD_FAILURE(); //输出错误,继续进行测试
ADD_FAILURE_AT(“file_path”,line_number);//输出自定义错误,继续进行测试

FAIL()示例:

TEST(FunTest, MixNumbers)
{
    FAIL()<<"Test Failure1";
    FAIL()<<"Test Failure2";
}
输出结果:
test/UnitTest-1.cpp:24: Failure
Failed
Test Failure1

ADD_FAILURE()示例:

TEST(FunTest, MixNumbers)
{
    ADD_FAILURE()<<"Test Failure1";
    ADD_FAILURE()<<"Test Failure2";
}
输出结果:
test/UnitTest-1.cpp:24: Failure
Failed
Test Failure1
test/UnitTest-1.cpp:31: Failure
Failed
Test Failure2

ADD_FAILURE_AT()示例:

TEST(FunTest, MixNumbers)
{
    ADD_FAILURE_AT("Show it ",12);
}
输出结果:
Show it :12: Failure
Failed

对于错误处理Throw的测试

断言式(与预期不符,则退出当前测试):

ASSERT_THROW(statement, exception_type)
ASSERT_ANY_THROW(statement)
ASSERT_NO_THROW(statement)

期望式(即使不符,仍然进行测试):

EXPECT_THROW(statement, exception_type)
EXPECT_ANY_THROW(statement)
EXPECT_NO_THROW(statement)

很简单,不进行详细说明了~

给一个官方的例子吧

ASSERT_THROW(Foo(5), bar_exception);

EXPECT_NO_THROW({
  int n = 5;
  Bar(&n);
});

更详细的错误信息

GoogleTest给出的文档提了三种方法,我个人推荐更通用(优雅)的第二种方法。
第一种方法,就是使用
ASSERT_PREDx与EXPECT_PREDx这种预先定义好的,参数为(函数名,需要传入的形参1,需要传入的形参2,……)(x代表需要传入的形参)
第二种方法使用了::testing::AssertionResult这个预先定义的类。

基于这个类,有两个派生类:

// Returns an AssertionResult object to indicate that an assertion has
// succeeded.
AssertionResult AssertionSuccess();

// Returns an AssertionResult object to indicate that an assertion has
// failed.
AssertionResult AssertionFailure();

我们可以使用<<来将错误信息打印出来。例子如下:

::testing::AssertionResult IsEven(int n) {
  if ((n % 2) == 0)
    return ::testing::AssertionSuccess();
  else
    return ::testing::AssertionFailure() << n << " is odd";
}

这时测试EXPECT_TRUE(IsEven(Fib(4)))将打印出:

Value of: IsEven(Fib(4))

Actual: false (3 is odd)

Expected: true

第三种很像第一种,不多说了~


猜你喜欢

转载自blog.csdn.net/sunhaobo1996/article/details/79370472