2016-07-05 45 views
2

假設我有一個名爲ProfileTest谷歌的測試夾具從::testing::TestWithParams<T>繼承,創建一個解析器:如何在Google Test中爲一個燈具運行多個測試用例?

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與壞的內容,但TestProfileGoodFormedContentTEST_P不適合測試不良內容。

我想我應該添加一個新的TEST_P,但它具有相同的fixture(ProfileTest)這使我所有的測試案例將提供給有ProfileTest作爲夾具任何TEST_P錯誤。

我應該怎麼做才能同時測試格式良好的內容和不良格式的內容?

+0

難道你不能爲你的參數集添加一個布爾值,並且該布爾值指示內容是否格式正確?然後,當你編寫你的'TEST_P'時,你可以根據它是否格式良好形成不同的斷言。 –

+0

@NirFriedman這是不好的做法。如果測試失敗,則測試失敗時,輸出不清楚輸出布爾標誌的值。是的,你可以添加額外的打印,但有更好的方法來解決這個問題。 –

+0

你真的需要'TestWithParam'嗎?那麼,我的意思是說,你真的需要一些格式良好的和幾個不合格的價值觀,或者你只是計劃兩個版本(一個是合格的,一個是不合格的)? –

回答

1

就你而言,你需要儘可能多的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 _ ***宏。

相關問題