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