在gtest中传递两个数组作为参数

时间:2017-07-28 05:35:09

标签: c++ arrays function unit-testing googletest

我需要编写一个单元测试(gtest),它分别从数组a[]b[]传递两个值。

示例:

a[] = {40, 45, 50 ,55, 60}
b[] = {2, 3, 5, 8, 9, 11}

我的测试用例会将这些数组(a[]b[])作为函数的参数传递。

有没有办法可以将两个数组都传递给测试用例?

1 个答案:

答案 0 :(得分:2)

期望数组是静态的,然后您可以像下面的示例所示那样传递它们:

class ArrayTests : public UnitTest_SomeClass,
    public testing::WithParamInterface<std::pair<int*, int*>>
{ 
};

TEST_P(ArrayTests, doSomething)
{
    const auto pair = GetParam();
    const auto a = pair.first;
    const auto b = pair.second;

    EXPECT_EQ(4, a[3]);
    EXPECT_EQ(6, b[4]);
}

int a[]{ 1,2,3,4 };
int b[]{ 2,3,4,5,6 };

INSTANTIATE_TEST_CASE_P(UnitTest_SomeClass, ArrayTests, testing::Values(std::make_pair(a, b)));

您现在可以将不同的数组传递给测试:

int a0[]{ 1,2,3,4 };
int b0[]{ 2,3,4,5,6 };
int a1[]{ 7,8,9,10 };
int b1[]{ 2,3,4,5,6 };

INSTANTIATE_TEST_CASE_P(UnitTest_SomeClass, ArrayTests, testing::Values(std::make_pair(a0, b0), std::make_pair(a1, b1)));

我认为在这里使用std::vector对于int数组会更容易,因为你可以访问元素的数量。 HTH