我真的建议看看Google C++ 模拟框架 https://github.com/google/googletest/tree/master/googlemock。即使您不想模拟任何东西,它也可以让您轻松编写相当复杂的断言。
例如
//checks that vector v is {5, 10, 15}
ASSERT_THAT(v, ElementsAre(5, 10, 15));
//checks that map m only have elements 1 => 10, 2 => 20
ASSERT_THAT(m, ElementsAre(Pair(1, 10), Pair(2, 20)));
//checks that in vector v all the elements are greater than 10 and less than 20
ASSERT_THAT(v, Each(AllOf(Gt(10), Lt(20))));
//checks that vector v consist of
// 5, number greater than 10, anything.
ASSERT_THAT(v, ElementsAre(5, Gt(10), _));
有很多matchers https://github.com/google/googletest/blob/main/docs/reference/matchers.md适用于每种可能的情况,您可以将它们组合起来以实现几乎任何目标。
我有没有告诉过你ElementsAre
只需要iterators
and size()
一个类上的方法可以工作吗?因此它不仅适用于 STL 中的任何容器,也适用于自定义容器。
Google Mock 声称几乎与 Google Test 一样便携,坦率地说,我不明白你为什么不使用它。这真是太棒了。