首页 > 解决方案 > 谷歌模拟框架匹配器元素数组比较

问题描述

我有一个可以打电话的谷歌测试

EXPECT_THAT(unit.OnEndStartup(), ::testing::ElementsAre(
       IsEvent(Result::NoError,Type::S , ""),
       IsEvent(Result::NoError,Type::N , ""),
       IsEvent(Result::NoError,Type::E , ""),
       IsEvent(Result::NoError,Type::C , "")
));

IsEvent是一个MATCHER_P2定义如下。

unit.OnEndStartup() returns vector<Info> where struct Info { 
       Result result;
       PackageType type;
       std::string newVersion;



 inline bool operator==(Info e1)
    {
        return (e1.result == result
                && e1.package == package
                && e1.newVersion == newVersion);
    }
   }

EXPECT_THAT()调用在文件中的多个位置使用。我正在寻找一种合理的方法来重构对 IsEvent() 的多次调用。

我已经定义

std::array<Info, 4> expected_default_list = {
        Info(Result::NoError, Type::S, ""),
        Info(Result::NoError, Type::N, ""),
        Info(Result::NoError, Type::E, ""),
        Info(Result::NoError, Type::C, "")
};


EXPECT_THAT(unit.OnEndStartup(), ::testing::ElementsAreArray(expected_default_list));

这是给模板错误。我重构代码的方法是否正确?我得到的错误是

error: no match for ‘operator==’ (operand types are ‘const Info’ and ‘const Info’)
   bool operator()(const A& a, const B& b) const { return a == b; }

标签: c++googletestmatchergooglemock

解决方案


推荐阅读