比较 google 单元测试框架中的字节
comparing bytes in google unit test framework
我有一个下面的测试用例,我想在 google 测试中比较字节。在 Unity 单元测试框架工作中,我们有
TEST_ASSERT_BYTES_EQUAL(0xaa, output[4]);
google 测试中是否有类似的 ASSERT。我在 google 测试和测试用例失败中有以下代码。
TEST(sprintf, NoBufferOverRunsForNoFormatOperations) {
char output[5];
memset(output, 0xaa, sizeof output);
ASSERT_EQ(3, sprintf_s(output, "hey"));
ASSERT_STREQ("hey", output);
ASSERT_THAT(0xaa, output[4]);
}
失败日志
[ RUN ] sprintf.NoBufferOverRunsForNoFormatOperations
Value of: 0xaa
Expected: is equal to -86
Actual: 170 (of type int)
[ FAILED ] sprintf.NoBufferOverRunsForNoFormatOperations (0 ms)
欢迎提供任何线索和帮助。
问题是您正在比较 0xaa
,一个值为十进制 170 的 int
类型的文字,与 output[4]
的值本身是 char
。 char
是 C 和 C++ 中的 signed 类型。您将 0xaa
或二进制 10101010
写入了相关字节。因为它被解释为带符号的数字,所以前导 1
被视为二进制补码中的符号位(我认为这是直到 C++20 之前的未定义行为),它的值为 -86 = 170 - 256.
我有一个下面的测试用例,我想在 google 测试中比较字节。在 Unity 单元测试框架工作中,我们有
TEST_ASSERT_BYTES_EQUAL(0xaa, output[4]);
google 测试中是否有类似的 ASSERT。我在 google 测试和测试用例失败中有以下代码。
TEST(sprintf, NoBufferOverRunsForNoFormatOperations) {
char output[5];
memset(output, 0xaa, sizeof output);
ASSERT_EQ(3, sprintf_s(output, "hey"));
ASSERT_STREQ("hey", output);
ASSERT_THAT(0xaa, output[4]);
}
失败日志
[ RUN ] sprintf.NoBufferOverRunsForNoFormatOperations
Value of: 0xaa
Expected: is equal to -86
Actual: 170 (of type int)
[ FAILED ] sprintf.NoBufferOverRunsForNoFormatOperations (0 ms)
欢迎提供任何线索和帮助。
问题是您正在比较 0xaa
,一个值为十进制 170 的 int
类型的文字,与 output[4]
的值本身是 char
。 char
是 C 和 C++ 中的 signed 类型。您将 0xaa
或二进制 10101010
写入了相关字节。因为它被解释为带符号的数字,所以前导 1
被视为二进制补码中的符号位(我认为这是直到 C++20 之前的未定义行为),它的值为 -86 = 170 - 256.