c/c++语言开发共享GoogleTest初探(1)

此篇主要了解一下GoogleTest中的断言。 总的来说,GoogleTest中的断言分为两大类:EXPECT_*和ASSERT_*,这两者在测试成功或失败后均会给出测试报告,区别是前者在测试失败后会继续执行下面的测试,而后者在测试失败后会立即终止测试。 GoogleTest中的比较断言,涉及整型, …

此篇主要了解一下googletest中的断言。

总的来说,googletest中的断言分为两大类:expect_*和assert_*,这两者在测试成功或失败后均会给出测试报告,区别是前者在测试失败后会继续执行下面的测试,而后者在测试失败后会立即终止测试。

 googletest中的比较断言,涉及整型,字符串, 浮点型,布尔型的比较判断

fatal assertion nonfatal assertion verifies
assert_true(condition) expect_true(condition) condition == true
assert_true(condition) expect_false(condition) condition == false
assert_eq(expected, actual) expect_eq(expected, actual) expected == actual
assert_ne(val1, val2) expect_ne(val1, val2) val1 != val2
assert_le(val1, val2) expect_le(val1, val2) val1 <= val2
assert_lt(val1, val2) expect_lt(val1, val2) val1 < val2
assert_ge(val1, val2) expect_ge(val1, val2) val1 >= val2
assert_gt(val1, val2) expect_gt(val1, val2) val1 > val2
assert_streq(expected, actual) expect_streq(expected, actual) (c-string) expected == actual
assert_strne(s1, s2) expect_strne(s1, s2) (c-string) s1 != s2
assert_strcaseeq(s1, s2) expect_strcaseeq(s1, s2) (c-string) s1 == s2  ignoring case
assert_strcasene(s1, s2) expect_strcasene(s1, s2) (c-string) s1 != s2  ignoring case
assert_float_eq(expected, actual) expect_float_eq(expected, actual) (float) expected == actual
assert_double_eq(expected, actual) expect_double_eq(expected, actual) (double) expected == actual
assert_near(val1, val2, abs_error) expect_near(val1, val2, abs_error) abs(val1-val2) <= abs_error

 

异常断言:

fatal assertion nonfatal assertion verifies
assert_throw(statement, exception_type); expect_throw(statement, exception_type); statement throws an exception of the given type
assert_any_throw(statement); expect_any_throw(statement); statement throws an exception of any type
assert_no_throw(statement); expect_no_throw(statement); statement doesn’t throw any exception

 

几个特殊的断言(可用于流程控制)

succeed() 一个成功断言
fail() 一个失败断言(fatal failure)
add_failure() 一个失败断言(nonefatal failure)
add_failure_at(file, line) 在给定的文件的给定行数生成一个失败断言(nonefatal failure)

 

对于一些待测试的,返回值为bool变量的函数,可以使用以下的断言(n代表参数个数):

fatal assertion nonfatal assertion verifies
assert_predn(predn, val1,…); expect_predn(predn, val1,…); predn(val1,...) is true

另外,可以对测试函数进行一个包装,使用以下断言来判断包装好的函数:

fatal assertion nonefatal assertion verifies
assert_pred_formatn(pred_formatn, val1, …); expect_pred_formatn(pred_formatn, val1, …); pred_formatn(val1, ...) is successful

要求pred_formatn的返回值是assertionresult, 例子如下:

// returns true if m and n have no common divisors except 1.  bool mutuallyprime(int m, int n) { ... }    // returns the smallest prime common divisor of m and n,  // or 1 when m and n are mutually prime.  int smallestprimecommondivisor(int m, int n) { ... }    // a predicate-formatter for asserting that two integers are mutually prime.  ::testing::assertionresult assertmutuallyprime(const char* m_expr,                                                 const char* n_expr,                                                 int m,                                                 int n)   {    if (mutuallyprime(m, n)) return ::testing::assertionsuccess();      return ::testing::assertionfailure() << m_expr << " and " << n_expr        << " (" << m << " and " << n << ") are not mutually prime, "        << "as they have a common divisor " << smallestprimecommondivisor(m, n);  }

使用一个assertmutuallyprime函数来包装一下待测试函数mutuallyprime。此时再使用断言:

expect_pred_format2(assertmutuallyprime, b, c);

如果失败,则会打印出失败信息

b and c (4 and 10) are not mutually prime, as they have a common divisor 2.

还有类型断言:

::testing::staticasserttypeeq<t1, t2>();

使用这个函数可以判断t1和t2类型是否一致

最后,可以使用gmock中的各种matchers来进行断言:

fatal assertion nonfatal assertion verifies
assert_that(value, matcher); expect_that(value, matcher); value matches matcher

matchers 见gmock 的介绍

参考链接:

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/603792.html

(0)
上一篇 2021年5月12日
下一篇 2021年5月12日

精彩推荐