首页 > 解决方案 > GTest - 在不同的参数上运行多个测试用例

问题描述

注意:我知道这个问题是以不同的方式提出的,但由于我的限制,我无法解决它:

  1. 我正在使用谷歌测试版1.7
  2. 在 Visual Studio 2010 中编译,使用平台工具集 V100

我正在为我创建的库编写谷歌测试。

在我的库中,我有 3 个结构,如下所示:

struct utc_clock{ .... }
struct system_clock {....}
struct cpu_clock {....}

此外,我还有另一个类将它们用作模板参数。

在我的测试用例中,我执行以下操作:

TEST(MyTest, testImportantThings)
{
    time_point<utc_clock> tp = utc_clock::now();

    ASSERT_EQ(..things with tp... );
    ... more ASSERTION 
}

我正在尝试做的是运行

TEST(MyTest, testImportantThings)

utc_clock每个, system_clock,多次cpu_clock

我研究了如何获取 gtest TYPED_TEST 参数类型

之后,我得到以下信息:

template<typename T>
struct MyTest: public testing::Test{
    using MyParamType = T;
};

using MyTypes = testing::TYpes<utc_clock, system_clock, cpu_clock>;

TYPED_TEST_CASE(MyTest, MyTypes);

TYPED_TEST(MyTest, testImportantStuff)
{
    using clock = typename TestFixture::MyParamType;

    timepoint<clock> tp = clock::now();

    ASSERT_EQ(..things with tp... );
    ... more ASSERTION 

}

但我收到以下错误:

  1. ';' 之前的意外标记 上:using MyParamType = T;

  2. testing::internal::TYPEList 使用类模板需要在线模板争论列表:using MyTypes = testing::TYpes<utc_clock, system_clock, cpu_clock>;

和更多...

标签: c++googletest

解决方案


您的编译器可能太旧,无法支持使用using. 如果你用旧式的 typedef 语句替换它们会怎样?

例如,您可以替换

using MyParamType = T;

与等价物:

typedef T MyParamType;

推荐阅读