如何使用 cppunit 断言宏来检查返回数据类型的预处理器值?

Posted

技术标签:

【中文标题】如何使用 cppunit 断言宏来检查返回数据类型的预处理器值?【英文标题】:How to use cppunit assert macros to check against preprocessor value which returns data type? 【发布时间】:2016-01-29 08:54:44 【问题描述】:

我有一个预处理器指令列表:

#define __SIZE_TYPE__ long unsigned int
#define __UINT16_TYPE__ short unsigned int
#define __UINT_LEAST8_TYPE__ unsigned char
#define __VERSION__ 4
.
.

现在我正在编写一个 cppunit 测试用例来检查这些指令的值,如下所示:

CPPUNIT_ASSERT_EQUAL(4, __VERSION__);

现在我想为 UINT16_TYPESIZE_TYPEUINT_LEAST8_TYPE 编写相同的 cppunit 断言,以确保它们具有正确的值,但我没有得到我应该使用哪个 cppunit 断言?那么,请建议为此目的使用哪个 cppunit 断言?

【问题讨论】:

您是否在自己的项目头文件中自己定义这些宏?然后不要。以双下划线are reserved in all scopes for the implementation (compiler and standard library)开头的名称。 @JoachimPileborg 不,我没有自己定义它们,它们是由 gcc -dM -E 生成的 - /null 命令 【参考方案1】:

如果您使用 C++11,请使用 std::is_same 检查类型。 http://en.cppreference.com/w/cpp/types/is_same

例如:CPPUNIT_ASSERT(std::is_sameSIZE_TYPE, long unsigned int>::value)

但老实说,我认为此类检查没有任何理由。

【讨论】:

【参考方案2】:

从它们的名字来看,它们似乎是用于<cstdint> 头文件中定义的“标准”整数的宏。

在这种情况下,__UINT16_TYPE__ 应该是一个无符号的 16 位值,这很容易测试。你可以这样做,例如

CPPUNIT_ASSERT_EQUAL(2, sizeof(__UINT16_TYPE__));

这当然取决于您使用的是基于 8 位字节的“普通”计算机。

要检查类型,您可以使用 C++11 type-traits,如 std::is_integralstd::is_unsigned

我真的不明白做这些检查的意义。如果这些宏是由编译器生成的,那么您可以确定它们对于您所在的平台是正确的。

【讨论】:

加上CPPUNIT_ASSERT_GREATER( 0, static_cast<__UINT16_TYPE__>(-1)); CPPUNIT_ASSERT_GREATER 仅在 cppunit 未发布的 master 分支中。

以上是关于如何使用 cppunit 断言宏来检查返回数据类型的预处理器值?的主要内容,如果未能解决你的问题,请参考以下文章

用于检查是不是抛出异常的 C++ 断言函数

Jmeter之断言——检查点

JMeter断言

jmeter断言

如何检查 Groovy 断言返回?

jmeter压测学习9-响应断言