gpt4 book ai didi

c++ - 检查容器元素之间关系的 googletest 匹配器

转载 作者:行者123 更新时间:2023-11-28 06:36:19 25 4
gpt4 key购买 nike

我有一个返回容器的函数。为简单起见,假设它是一个 std::list<int> .

如果容器具有三个元素并且第一个和第三个元素彼此相同且与第二个元素不同,则特定测试应该通过。未指定元素的实际值,仅指定它们之间的关系。

有没有办法使用 gmock Matchers 实现这样的测试?也许它看起来像:

EXPECT_THAT( list , ElementsMapOnto( A , B , A ) );

我想过类似的事情:

EXPECT_THAT( list , ElementsAre( _ , Ne(at(list,0)) , Eq(at(list,0) );

但这给我带来了两个问题:

1) 如果有几个唯一值,它就不能很好地扩展(我不得不写 AllOf(Ne(at(list(0)),Ne(at(list,1)),...) ;

2) 它需要创建list在创建匹配器之前(而我正在使用参数化测试来列出输入和输出),所以总的来说我想写这样的东西:

TestSpec tests[] = { { someInputData , ElementsMapOnto( A , B , A ) }, ... };

struct MyTest : testing::Test , testing::TestWithParam<TestSpec> { ... };

TEST_P( MyTest , )
{
std::list<int> list = functionUnderTest( GetParam().someInputData );
EXPECT_THAT( list , GetParam().matcher );
}

最佳答案

在这种情况下,定义自己的匹配器通常比尝试扭曲内置的 googlemock 匹配器以适应此类特定用例要容易得多。例如,在这里您可以想出某种数据结构来定义容器中元素之间的有效关系,然后构建您自己的匹配器以将该规范作为输入。

关于c++ - 检查容器元素之间关系的 googletest 匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26723067/

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