【问题标题】:googletest matcher that checks relations between container elements检查容器元素之间关系的 googletest 匹配器
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多