当前位置: 移动技术网 > IT编程>开发语言>C/C++ > GoogleTest初探(1)

GoogleTest初探(1)

2019年04月23日  | 移动技术网IT编程  | 我要评论

旧火车票,楷书四大家是谁,明日时代

此篇主要了解一下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 的介绍

参考链接:

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网