gpt4 book ai didi

c++ - gmock : check only one element of vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:37 26 4
gpt4 key购买 nike

根据备忘单 https://github.com/google/googlemock/blob/master/googlemock/docs/v1_7/CheatSheet.md

可以使用 ElementsAre(_,_,..) 来比较 vector 的元素。

如果我们只想选取 vector 的一个特定元素,并在第 (n+1) 个条目处放置一个对象的比较器,您将如何选取单个元素?

示例

struct MyStruct
{
MyPrimitiveClass1 class1_obj;
MyPrimitiveClass2 class2_obj;
};
std::vector< MyStruct > myvec;

我需要检查函数中传递的 myvec 是否满足

myvec[n] == test_my_struct_obj

编辑:现在,使问题复杂化的是,myvec 本身是一个类的字段,比如说 MySuperClass,传递的是一个 MySuperClass my_superclass_obj; .

我需要检查是否

my_sperclass_obj.myvec[n] == test_my_struct_obj

现在我有这个结构

EXPECT_CALL(mocked_obj, foo( 
Field(&MySuperClass::myvec,
ElementsAre(_, _ .. n-1 times,
MyStructMatcher(), _)
)
)
);

我的想法是转义 ElementsAre 并做一些更清洁的事情。有人有提示吗? (此处为 n00b)

最佳答案

用函数封装你的问题,比如:

template <typename T>
std::vector<testing::Matcher<T>> matchNthElement(int index, int size, testing::Matcher<T> matcherForNthElement)
{
std::vector<testing::Matcher<T>> result{N, testing::_};
result[N] = matcherForNthElement;
return result;
}

并使用 ElementsAreArray 而不是 ElementsAre:

auto matchContainerWithNthElement = matchNthElement(n, size, MyStructMatcher());
EXPECT_CALL(mocked_obj, foo(
Field(&MySuperClass::myvec,


ElementsAreArray(matchContainerWithNthElement.data(),
matchContainerWithNthElement.size())

)
)
);

关于c++ - gmock : check only one element of vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43912116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com