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

pro*_*eek 6 c++ python containers unit-testing

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

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

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

sameTwoVectors(members, [5,2,3,15])
Run Code Online (Sandbox Code Playgroud)

Cap*_*ous 3

由于std::vector包含一个初始化列表构造函数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}));
}
Run Code Online (Sandbox Code Playgroud)

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

EXPECT_TRUE(result == std::vector<int>({5,2,3,15}));
Run Code Online (Sandbox Code Playgroud)