C++ gmock:在std::vector的一系列元素上调用matcher

C++ gmock:在std::vector的一系列元素上调用matcher,c++,googletest,googlemock,C++,Googletest,Googlemock,我想测试一个函数,该函数对数组元素进行重新排序,使偶数位于std::vector的开头: void EvenOdd(向量*A_ptr); 这是我写的一个有效测试: MATCHER(第一个元素是奇数,第二个元素是奇数,“第一个元素是奇数,第二个元素是偶数!”) { auto isOdd=[](auto x)->bool{return x&1;}; return!isOdd(arg[0])| | isOdd(arg[1]); } 测试(阵列偶数、单纯形测试) { std::向量v{1,2,4,8,

我想测试一个函数,该函数对数组元素进行重新排序,使偶数位于std::vector的开头:

void EvenOdd(向量*A_ptr);
这是我写的一个有效测试:

MATCHER(第一个元素是奇数,第二个元素是奇数,“第一个元素是奇数,第二个元素是偶数!”)
{
auto isOdd=[](auto x)->bool{return x&1;};
return!isOdd(arg[0])| | isOdd(arg[1]);
}
测试(阵列偶数、单纯形测试)
{
std::向量v{1,2,4,8,9,6,3};
偶数(&v);
对于(自动it=v.begin();it!=v.end()-1;++it)
{
断言(它,第一个奇数意味着第二个奇数());
}
}
在调用EvenOdd()之后,我希望v是[6,2,4,8,9,1,3]。所有偶数都在奇数之前

有没有办法从
数组\u EvenOdd.simpleTest
测试中删除for循环? 我正在寻找将
first\u odd\u implements\u second\u odd
匹配器应用于以下范围的内容:

[v.begin(),v.end()-1]

IMO测试不必包含任何逻辑(例如,需要使用
std::is_partitioned
),而是应该使用
Arrange/Act/Assert
方法,在该方法中,您陈述输入,执行测试中的代码,并将输出与可硬编码的预期输出进行比较


使用函数生成期望值(而不是硬编码的值)可能是危险的,因为如果最终在函数中使用相同的算法并生成期望输出,那么如果基础算法不能正常工作,那么预期输出和实际输出都将不正确(但相同,因此测试将通过!)。使用
std
algos时不会发生这种情况,但可能会尝试使用正在测试的相同算法生成预期输出,这可能是错误的。

您在寻找什么?另外,
EvenOdd
可以简单地使用
std::partition
,然后所有的测试都将是毫无意义的。在链接中,您的问题的答案就在示例代码中,其中偶数从奇数中分割,然后使用
std::is_partitioned
进行测试。