2017-07-26 138 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,结果);'等等? –

相关问题