如何编写单元测试预先规避自定义相等运算符的潜在错误?
提前给单元测试打“预防针”:预判潜在错误
我在编写单元测试时,总习惯提前预判我自己(或者后续维护代码的其他开发者)可能踩的坑。拿一个实现了相等运算符的Foo结构体来举例:
struct Foo { int m_foo; bool operator==(const Foo& other) const { return m_foo == other.m_foo; } };
针对这个结构体的相等逻辑,我会写两组核心测试用例:
// 测试成员变量相等时,运算符返回true TEST(FooEquality, Equal) { Foo f1, f2; f1.m_foo = 1; f2.m_foo = 1; EXPECT_EQ(f1, f2); } // 测试成员变量不等时,运算符返回false TEST(FooEquality, NotEqual) { Foo f1, f2; f1.m_foo = 1; f2.m_foo = 2; EXPECT_NE(f1, f2); }
这两个用例看似简单,但能有效防范后续的常见错误:比如如果有人不小心把operator==里的==写成了!=,或者修改成员变量后忘了同步相等逻辑,测试会立刻失败,帮我们及时发现问题,避免把bug带到生产环境里。
内容的提问来源于stack exchange,提问作者arrtchiu
相关产品推荐
相关产品推荐

