如何在谷歌测试中为一个夹具运行多个测试用例



>假设我有一个名为 ProfileTest 的 Google 测试装置,它继承自创建解析器的::testing::TestWithParams<T>

class ProfileTest:
public ::testing::TestWithParam<std::tuple<std::string,std::string>>{
public:
    QString getName(){
        return QFileInfo(*m_file).fileName();
    }
protected:
    void SetUp(){
        m_profile = new Profile();
        m_file = new QFile(std::get<0>(GetParam()).c_str());
        m_file->open(QIODevice::WriteOnly | QIODevice::Text);
        m_file->write(std::get<1>(GetParam()).c_str());
        m_file->close();
    }
    void TearDown(){
        delete m_file;
        delete m_profile;
    }
    Profile* m_profile;
    QFile *m_file;
};

参数化测试用例:

TEST_P(ProfileTest, TestProfileGoodFormedContent){
    ASSERT_NO_THROW(m_profile->readProfile(QFileInfo(*m_file)));
    ASSERT_STREQ(m_profile->name(), getName());
    ASSERT_GE(m_profile->getProfileConfigurations().size(),1);
}

我添加了具有格式良好的内容的TEST_CASE,并且效果很好。

现在我想添加格式错误的内容的TEST_CASE,但TestProfileGoodFormedContent TEST_P不适合测试不良内容。

我想我应该添加一个新TEST_P,但它将具有相同的fixture(ProfileTest),这给我带来了一个错误,即所有测试用例都将提供给任何ProfileTest作为夹具的TEST_P

我应该怎么做才能同时测试格式正确的内容和格式不正确的内容?

在您的情况下,您需要尽可能多的Google测试装置,因为您有不同的场景。

当然,您可以拥有基本夹具类 - 这将为您设置常见的东西:

class ProfileTestBase :
public ::testing::TestWithParam<std::tuple<std::string,std::string>>{
public:
    QString getName(){
        return QFileInfo(*m_file).fileName();
    }
protected:
    void SetUp(){
        m_profile = new Profile();
        m_file = new QFile(std::get<0>(GetParam()).c_str());
        m_file->open(QIODevice::WriteOnly | QIODevice::Text);
        m_file->write(std::get<1>(GetParam()).c_str());
        m_file->close();
    }
    void TearDown(){
        delete m_file;
        delete m_profile;
    }
    Profile* m_profile;
    QFile *m_file;
};

所以 - 基本上你当前的类将成为基类。

对于好/坏/其他任何东西 - 创建特定的夹具类:

class GoodProfileTest : public ProfileTestBase {};
class BadProfileTest : public ProfileTestBase {};

您当前的"良好"配置文件测试将属于GoodProfileTest:

TEST_P(GoodProfileTest, TestProfileGoodFormedContent){
    ASSERT_NO_THROW(m_profile->readProfile(QFileInfo(*m_file)));
    ASSERT_STREQ(m_profile->name(), getName());
    ASSERT_GE(m_profile->getProfileConfigurations().size(),1);
}

无论您需要测试什么不良配置文件 - 请使用 BadProfileTest 类。等等...当然 - 您需要为每个灯具使用 INSTANTIATE_*** 宏。

最新更新