c++ - Gmock 参数化测试运行两次

标签 c++ googletest googlemock

这里是一个示例代码:

struct MyFixture: public ::testing::Test
{
};

template <typename param>
struct MyFixtureWithParam: public MyFixture, public ::testing::WithParamInterface<param>
{
};

using MyFixtureWithNumber = MyFixtureWithParam<int>;

TEST_P(MyFixtureWithNumber, Test1)
{
    std::cout << "Test1 with param: " << GetParam() << std::endl;
}

INSTANTIATE_TEST_CASE_P(Test1, MyFixtureWithNumber, ::testing::Values(0,3));

TEST_P(MyFixtureWithNumber, Test2)
{
    std::cout << "Test2 with param: " << GetParam() << std::endl;
}

INSTANTIATE_TEST_CASE_P(Test2, MyFixtureWithNumber, ::testing::Values(5, 7));

我期望获得 4 个测试(Test1 2 个实例,Test2 2 个实例),但已运行 8 个测试。为什么?如何解决这个问题?

最佳答案

INSTANTIATE_TEST_CASE_P(prefix, fixture, generator)

注册要为使用相同fixture类型的每个参数化测试用例运行的测试。 前缀仅用于构建参数化测试的名称,这些测试出现在输出中,并且可以与--gtest-filter命令行参数一起使用。

因此,如果您希望 Test1Test2 使用不同的参数值集运行,则需要强制它们为不同的装置类型:

// ...

struct MyFixtureForTest1 : public MyFixtureWithNumber {};
struct MyFixtureForTest2 : public MyFixtureWithNumber {};

TEST_P(MyFixtureForTest1, Test1)
{
    std::cout << "Test1 with param: " << GetParam() << std::endl;
}

INSTANTIATE_TEST_CASE_P(SmallValues, MyFixtureForTest1, ::testing::Values(0,3));

TEST_P(MyFixtureForTest2, Test2)
{
    std::cout << "Test2 with param: " << GetParam() << std::endl;
}

INSTANTIATE_TEST_CASE_P(LargeValues, MyFixtureForTest2, ::testing::Values(5, 7));

关于c++ - Gmock 参数化测试运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50659375/

相关文章:

c++:通过指针访问主类的std::vector的类出错

c++ - 在C++中的for循环内为链表生成节点

c++ - 在代码中放置#includes 和冗余的位置(头文件和实现文件)

c++ - 在 Google 测试失败输出消息中自定义实际/预期的 "Value of"字符串

c++ - 使用 GMOCK 在没有类文件的情况下模拟在 .cpp 中声明和定义的静态函数

c++ - 在googlemock中匹配自定义类型的参数

c++ - 为什么只在 eclipse Debug模式下得到无效的套接字?

cmake - 针对 GTest 的链接失败

c++ - 使用 GoogleTest 测试读取文件

c++ - Google Mock - 使用 CoTaskMemFree 时测试无结果返回