0
我有一个返回容器的函数。为了简单起见,我们假设这是一个std::list<int>
。googletest匹配器检查容器元素之间的关系
如果容器有三个元素并且第一个和第三个元素彼此相同并且与第二个元素不同,则应通过特定测试。没有指定元素的实际值,只是它们之间的关系。
有没有办法使用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
(而我使用p arameterised测试制表输入和输出),所以总体来说,我想写类似:
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);
}