6

在 C++ 的单元测试代码中,当我需要比较两个向量时,我会创建临时向量来存储预期值。

std::vector<int> expected({5,2,3, 15});
EXPECT_TRUE(Util::sameTwoVectors(result, expected));

我可以把它变成一条线吗?在 python 中,我可以生成一个带有“[...]”的列表。

sameTwoVectors(members, [5,2,3,15])
4

2 回答 2

3

由于std::vector包含一个采用 a的初始化列表构造函数std::initializer_list,只要sameTwoVectors函数按值、右值引用或引用接受向量,您就可以使用统一的初始化语法const

namespace Util
{
    bool sameTwoVectors(
        const std::vector<int>& result,
        const std::vector<int>& expected)
        {
            return result == expected;
        }
}


int main()
{
    std::vector<int> result;

    EXPECT_TRUE(Util::sameTwoVectors(result, {5,2,3,15}));
}

或者,如果sameTwoVectors只做一个简单的比较,你可以消除它。调用时只需在其位置使用比较表达式EXPECT_TRUE。权衡是您必须std::vector<int>显式指定而不是依赖隐式转换构造函数。它少了几个字符,并且更清楚预期的结果是什么。

EXPECT_TRUE(result == std::vector<int>({5,2,3,15}));
于 2013-06-16T01:47:57.240 回答
1

如果Util::sameTwoVectors需要 const 引用或只是一个值,你可以(假设C++11支持)这样写

EXPECT_TRUE(Util::sameTwoVectors(result, std::vector<int>{5, 2, 3, 15}));
于 2013-06-16T01:46:13.443 回答