Google C++单元测试框架GoogleTest---AdvancedGuide(译文)上

发布时间:2017-5-29 4:33:47 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Google C++单元测试框架GoogleTest---AdvancedGuide(译文)上 ",主要涉及到Google C++单元测试框架GoogleTest---AdvancedGuide(译文)上 方面的内容,对于Google C++单元测试框架GoogleTest---AdvancedGuide(译文)上 感兴趣的同学可以参考一下。

本文是gtest高级测试指南的译文,由于文章太长,分上下两部分。

一、简介

   本文档将向您展示更多的断言,以及如何构造复杂的失败消息,传播致命的故障,重用和加速您的测试夹具,并在您的测试使用各种标志。

二、更多断言

  本节包括一些不太常用,但仍然重要的断言。

  2.1 显式成功和失败

  这三个断言实际上不测试值或表达式。 相反,它们直接产生成功或失败。 与实际执行测试的宏类似,您可以将自定义失败消息流入它们。

SUCCEED();  

生成成功。 这不会使整体测试成功。 只有当测试在其执行期间没有任何断言失败时,测试才被认为是成功的。

注意:SUCCEED()是纯纪录片,目前不生成任何用户可见的输出。 但是,我们可能会在未来向Google Test的输出中添加SUCCEED()消息。

FAIL(); ADD_FAILURE(); ADD_FAILURE_AT("file_path",line_number);

FAIL()产生致命故障,而ADD_FAILURE()和ADD_FAILURE_AT()产生非致命故障。 当控制流而不是布尔表达式确定测试的成功或失败时,这些是有用的。 例如,您可能想要写如下:

switch(expression) {
  case 1: ... some checks ...
  case 2: ... some other checks
  ...
  default: FAIL() << "We shouldn't get here.";
}

注意:你只能在返回void的函数中使用FAIL()。 有关详细信息,请参阅 Assertion Placement section 部分。

 2.2 异常断言

这些用于验证一段代码抛出(或不抛出)给定类型的异常:

Fatal assertionNonfatal assertionVerifies
ASSERT_THROW(statementexception_type); EXPECT_THROW(statementexception_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

Examples:

ASSERT_THROW(Foo(5), bar_exception);

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

三、更好的错误消息的谓词断言

虽然Google测试有一套丰富的断言,但它们永远不可能完整,因为它不可能(也不是一个好主意)预测用户可能遇到的所有情况。 因此,有时用户必须使用EXPECT_TRUE()来检查复杂表达式,因为缺少更好的宏。 这有一个问题,没有显示你的表达式的部分的值,使得很难理解什么错误。 作为解决方法,一些用户选择自己构造失败消息,将其流式传输到EXPECT_TRUE()。 然而,这是尴尬,特别是当表达式有副作用或评价昂贵。

Google测试提供三种不同的选项来解决这个问题:

 3.1使用现有的布尔函数

如果你已经有一个函数或函数返回bool(或一个可以隐式转换为bool的类型),你可以在谓词断言中使用它来获得免费打印的函数参数:

Fatal assertionNonfatal assertionVerifies
ASSERT_PRED1(pred1, val1); EXPECT_PRED1(pred1, val1); pred1(val1) returns true
ASSERT_PRED2(pred2, val1, val2); EXPECT_PRED2(pred2, val1, val2); pred2(val1, val2) returns true

上一篇:[moka同学笔记]Linux命令基本格式及目录处理命令
下一篇:JS魔法堂:深究JS异步编程模型

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。