在c ++中创建未命名的容器,以便在单元测试中进行临时比较

时间:2013-06-16 01:28:06

标签: c++ python unit-testing containers

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

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

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

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

2 个答案:

答案 0 :(得分:3)

由于std::vector包含initializer-list constructor std::initializer_list,只要sameTwoVectors函数接受矢量值,右值引用或{{3}},您就可以使用统一初始化语法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}));

答案 1 :(得分:1)

如果Util::sameTwoVectors期望const引用或只是一个值,您可以(假设C++11支持)将其写为

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