我有一个生成B
的类A
。我知道在一个特定的设置中,如果我调用它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()
。
BTW A::operator=
已在生产中实现。
我可以使用vector
并进行迭代以手动搜索,但这似乎有些笨拙。
我如何可以优雅地编写此测试,而不必实现测试特定的运算符?
您可以简单地使用另一个容器和std::count
:
A expected_a(...);
B b;
std::vector<A> vec_of_as{ b.nextA() , b.nextA(), b.nextA() };
EXPECT_TRUE(std::count(std::begin(vec_of_as), std::end(vec_of_as), expected_a) == 1);