2017-07-26 137 views
0

我想通過谷歌測試框架來測試一個C++程序。如何使用從gtest返回值到另一個測試

我的代碼:

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

int subtractNumbers(int a, int b) 
{ 
    return a - b; 
} 

單元測試代碼:

//first test 
TEST(testMath, addTest1) 
{ 
    EXPECT_EQ(37, addNumbers(14, 23)); 
    getchar(); 
} 

//second test 
TEST(testMath, subtractTest1) 
{ 
    EXPECT_EQ(25, subtractNumbers(37, 12)); 
    getchar(); 
} 

//third test 
TEST(testMath, addTest2) 
{ 
    EXPECT_EQ(62, addNumbers(37, 25)); 
    getchar(); 
} 

但是,我需要我的單元測試是在一個不同的方式。我需要得到第一個測試的返回值(結果),並在第二個測試中用它作爲動態(如果第一個測試失敗,那麼程序應該終止顯示錯誤的詳細信息)。當第一次測試和第二次測試都OK(沒有失敗)時,第一次和第二次測試的返回值應該參數化爲第三次測試。

期望算法(如你的幫助):

第1步:第一次測試addNumbers(14, 23);

步驟2:檢查預期值和返回值(A);

步驟3.1:如果測試失敗,則終止該程序表示錯誤詳細信息;

步驟3.2:如果行(未失敗),運行第二測試subtractNumbers(A, 12);

步驟4:檢查預期值和返回值(B);

步驟5.1:如果測試失敗,則終止顯示行詳細信息和錯誤詳細信息的程序;

步驟5.2:如果行(未失敗),運行第三測試addNumbers(A,B);

第6步:檢查預期值和返回值;

步驟7.1:如果測試失敗,終止顯示OK詳細信息和錯誤信息的程序;

步驟7.2:如果確定,則顯示確定的詳細信息。

+0

爲什麼你想停止測試的第一個錯誤?由於測試應該是獨立的,所有失敗的測試都允許一次修復多個測試。它與彙編相同,所有錯誤都比第一個IMO停下來要好。 – Jarod42

+0

[OT]:您不應該在測試中使用'getchar()',如果您想暫停執行以進行調試,請使用* breakpoint *。 – Jarod42

回答

0

使用各種ASSERT_*宏會導致試驗中止失敗。您可以將EXPECT_EQ轉換爲ASSERT_EQ,然後將它們全部放在相同的TEST()之內。

TEST(testMath, testAll) 
{ 
    auto A = addNumbers(14, 23); 
    ASSERT_EQ(37, A); 
    auto B = subtractNumbers(A, 12) 
    ASSERT_EQ(25, B); 
    ASSERT_EQ(62, addNumbers(A, B)); 
} 
+0

是的,但我不想將第二個測試參數化爲靜態。我希望它是動態的。例如:'ASSERT_EQ(25,subtractNumbers(first_test_result,12));'或類似的東西。 –

+0

可以幫我解答這個部分嗎? –

+0

@MohammedShereif爲什麼你不使用'auto result = addNumbers(14,23); ASSERT_EQ(37,結果);'等等? –

相關問題