2012-07-06 89 views
1

我在想我是否正在測試我在此測試中列出的所有平等性,還是我只測試第一個。googleTest繼續測試

class SomethingTest : public testing::Test 
{ 
public: 
    SomethingTest() { } 
    virtual ~SomethingTest() { } 
}; 

     TEST_F(SomethingTest, Score) 
    { 
     Computer computer; 
     FourInARowStrategy* strategy = new FourInARowStrategy(); 

     vector<vector<int>> brd; 
     for(int i=0; i<6 ;i++) 
     { 
      vector<int> row ; 
      for(int j=0;j<7;j++) 
       row.push_back(0); 
      brd.push_back(row); 
     } 

     brd[5][5]=1; 
     brd[5][4]=2; 
     brd[5][3]=1; 
     brd[5][2]=1; 
     brd[5][1]=1; 
     brd[4][5]=2; 
     brd[4][4]=2; 
     brd[4][3]=1; 
     brd[4][2]=1; 
     brd[3][2]=2; 
     brd[3][1]=2; 
     brd[4][1]=2; 

     strategy->setGameBoard(brd); 
     strategy->displayBoard(); 
     EXPECT_EQ(9,computer.rowScoreAPlay(2,3,3,strategy)); 
     EXPECT_EQ(9,computer.scoreAPlay(2,3,3,strategy)); 
     EXPECT_EQ(0,computer.colScoreAPlay(2,3,3,strategy)); 
     EXPECT_EQ(5,computer.colScoreAPlay(1,3,3,strategy)); 
    } 

    //... 
    } 

你會參考谷歌的單元測試和良好的單元測試開發嗎?

感謝和問候。

+3

好裁判喜歡自己的文檔(http://code.google。 com/p/googletest/wiki/Primer)? – PlasmaHH 2012-07-06 10:07:13

回答

11

無論通過還是失敗,您都在測試它們。這是因爲您使用的是EXPECT_EQ而不是ASSERT_EQ

the docs

當他們失敗了,ASSERT_ *產量從目前的功能致命的失敗和回報,而EXPECT_ *產生一個非致命失敗,允許函數繼續運行。

通常情況下,EXPECT_*是更好的選擇,因爲該試驗的其餘可以繼續運行,並能提供有用的輸出。但是,如果測試不應該繼續,則ASSERT_*會更好。

舉例來說,如果你有,你希望有「OK」爲第一要素std::vector<std::string> results,你可以這樣做:

ASSERT_FALSE(results.empty()); // No point continuing if results is empty 
EXPECT_EQ("OK", results[0]); // Check first element 
+0

這是否意味着如果ASSERT_ *失敗,它會立即返回?例如,在ASSERT_ *後面有一些類似cleanup()的代碼,如果它失敗了,那麼cleanup()部分將不會被觸發? – ratzip 2015-10-01 07:27:45

5

我在想我是否在測試我在這個測試中列出的所有的平等性,還是我只測試第一個。

their introduction page

ASSERT_ *版本產生致命的失敗,當他們失敗,並中止當前函數。

這意味着第一個失敗的斷言將停止測試。

但這並不重要,因爲所有測試都應該通過。