【发布时间】:2019-11-07 12:34:08
【问题描述】:
我有一个生成A 的类B。我知道在一个特定的设置中,如果我调用它 3 次,它会生成一个特定的 A (expected_a) 实例,但我不知道序列的哪个位置。
我想写一些单元测试代码,例如:
A expected_a(...);
B b;
std::set<A> set_of_a{ b.nextA() , b.nextA(), b.nextA() };
EXPECT_TRUE(set_of_a.count(expected_a) == 1);
但是使用set 需要实现A::operator<()。 operator< 可以很容易地实现,但是我正在编写生产代码来满足测试,这是我不喜欢/不想做的。
我尝试使用 unordered_set,它不需要 operator<,但确实需要实现 hash()。
顺便说一句 A::operator= 已经在生产中实现。
我可以使用 vector 并遍历,手动搜索,但这似乎有点笨拙。
我怎样才能优雅地编写这个测试而不必实现测试特定的操作符?
【问题讨论】:
-
您可能会将该 A 扩展为 TestA 类型,该类型仅将该运算符添加到实际类的顶部。该实现将特定于测试,不会出现在实际的生产代码中。
标签: c++ unit-testing stl set containers