这里是一个示例代码:
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
命令行参数一起使用。
因此,如果您希望 Test1
和 Test2
使用不同的参数值集运行,则需要强制它们为不同的装置类型:
// ...
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/