如何将 gtest 中的 return 值用于另一个测试

How to use a return value from a gtest to another test

我正在尝试通过 Google 测试框架测试 C++ 程序。

我的代码:

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();
}

但是,我需要以不同的方式进行单元测试。

我的期望: 我需要获取第一个测试的 return 值(结果)并在第二个测试中将其作为动态使用(如果第一个测试失败,则程序应终止并显示错误详细信息)。当第一个测试和第二个测试都正常(没有失败)时,那么第一个和第二个测试的 return 值应该被参数化到第三个测试。

所需算法(如您的帮助):

第 1 步:运行 第一次测试 addNumbers(14, 23)

第 2 步:检查预期值和 return 值(A);

步骤 3.1:如果测试失败,终止程序显示错误详情;

步骤 3.2:如果 OK(未失败),运行 第二次测试 subtractNumbers(A, 12)

第 4 步:检查预期值和 return 值(B);

步骤 5.1:如果测试失败,终止程序显示 OK 详细信息和 Error 详细信息;

步骤 5.2:如果 OK(未失败),运行 第三次测试 addNumbers(A,B);

第 6 步:检查预期值和 return 值;

步骤 7.1:如果测试失败,则终止程序显示 OK 详细信息和 Error 详细信息;

步骤 7.2:如果 OK,显示 OK 详细信息。

使用各种 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));
}