【发布时间】:2014-11-03 20:56:26
【问题描述】:
我有一个返回容器的函数。为简单起见,假设它是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) 它需要在创建 Matcher 之前创建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 );
}
【问题讨论】:
标签: c++ unit-testing googletest googlemock