【发布时间】:2026-01-17 06:05:01
【问题描述】:
首先,我是 googletest 框架的新手,所以请善待。
我有一个函数
void setID(const int id)
{
ID = id;
}
其中 ID 是全局 unsigned int。 (是的,全局变量很糟糕,我只是想弄清楚我在做什么。)
我的单元测试是这样的
TEST_F(TempTests, SetId)
{
// Arrange
int id = -99;
// Act
setId(id);
// Assert
EXPECT_EQ(id, ID);
}
问题是我的单元测试总是通过,我需要它失败,因为 ID 应该是有符号整数而不是无符号整数。如果我没有在视觉上发现错误,那么单元测试就会通过,并且以后可能会导致错误。
为确保将来不会发生这种情况,最好在这种情况下单元测试比较失败。
我尝试过以各种方式将id 和ID 静态转换为有符号和无符号整数。
我尝试过EXPECT_TRUE(id == ID) 以各种方式将变量静态转换为有符号和无符号整数。
但在所有这些情况下,结果都是通过测试。
那么我怎样才能让 gtest 比较 id 的有符号值和 ID 的无符号值,以便测试失败,因为 id 将是 -99 而ID 将是 4294967197?
【问题讨论】:
-
为什么不直接检查
id是否低于0? -
我不明白你的问题。这如何解决
ID的值是什么? -
如何添加额外的期望来检查两种类型是有符号还是无符号(通过使用 type_traits、decltype 或模板)?
-
好主意,我会调查一下
-
打开编译器警告,警告有符号值与无符号值的比较。将警告视为错误,并修复代码。
标签: c++ googletest