断言参考
本页列出了 KumoTest 提供的用于验证代码的断言宏行为。要使用它们,请包含标头“ktest/ktest.h”。
下面列出的大多数宏都与EXPECT_变体成对出现和一个ASSERT_变体。失败时,EXPECT_宏会生成非致命的
失败并允许当前函数继续运行,而ASSERT_宏会产生致命故障并中止当前函数。
所有断言宏都支持将自定义失败消息流式传输到其中<< 运算符,例如:
EXPECT_TRUE(my_condition) << "My condition is not true";
任何可以流式传输到ostream的内容都可以流式传输到断言
宏——特别是 C 字符串和字符串对象。如果是宽字符串 (wchar_t*,
Windows 上UNICODE模式下的TCHAR*或std::wstring)被流式传输到
断言,打印时会被转换为UTF-8。
明确的成功和失败
本节中的断言直接生成成功或失败,而不是测试值或表达式。当控制流程而不是 布尔表达式,决定测试的成功或失败,如下所示以下示例:
switch(expression) {
case 1:
... some checks ...
case 2:
... some other checks ...
default:
FAIL() << "We shouldn't get here.";
}
SUCCEED
SUCCEED()
生成成功。这不会使整体测试成功。一个测试是仅当其断言在执行期间没有失败时才被视为成功。
SUCCEED断言纯粹是记录性的,目前不会产生任何用户可见的输出。但是,我们可以将SUCCEED消息添加到 KumoTest 输出中
将来。
FAIL
FAIL()
生成致命失败,从当前函数返回。
只能在返回void的函数中使用。看
断言放置 了解更多信息。
ADD_FAILURE
ADD_FAILURE()
生成非致命故障,允许当前功能继续运行。
ADD_FAILURE_AT
ADD_FAILURE_AT(file_path,line_number)
在指定的文件和行号处生成非致命故障。
广义断言
以下断言允许使用 matchers 来验证值。
EXPECT_THAT
EXPECT_THAT(value,matcher)
ASSERT_THAT(value,matcher)
验证 value 是否与 matcher matcher 匹配。
例如,以下代码验证字符串“value1”是否以
"Hello",value2 匹配正则表达式,value3 介于 5 和 10:
#include "kmock/kmock.h"
using ::testing::AllOf;
using ::testing::Gt;
using ::testing::Lt;
using ::testing::MatchesRegex;
using ::testing::StartsWith;
...
EXPECT_THAT(value1, StartsWith("Hello"));
EXPECT_THAT(value2, MatchesRegex("Line \\d+"));
ASSERT_THAT(value3, AllOf(Gt(5), Lt(10)));
匹配器使这种形式的断言能够像英语一样阅读并生成信息丰富的故障消息。例如,如果上面关于value1的断言
失败,结果消息将类似于以下内容:
Value of: value1
Actual: "Hi, world!"
Expected: starts with "Hello"
KumoTest 提供了一个内置的匹配器库 - 请参阅匹配器参考。也可以自己写 匹配器 - 请参阅快速编写新匹配器。 匹配器的使用使“EXPECT_THAT”成为一个强大的、可扩展的断言。
此断言的想法借鉴自 Joe Walnes 的 Hamcrest 项目,
它将 assertThat() 添加到 JUnit.
布尔条件
以下断言测试布尔条件。
EXPECT_TRUE
EXPECT_TRUE(condition)
ASSERT_TRUE(condition)
验证 condition 为真。
EXPECT_FALSE
EXPECT_FALSE(condition)
ASSERT_FALSE(condition)
验证 condition 为否。
二元比较
See also the Floating-Point Comparison assertions to compare floating-point numbers and avoid problems caused by rounding.
以下断言比较两个值。值参数必须是通过断言的比较运算符进行比较,否则编译器错误 将会产生结果。