代码之家  ›  专栏  ›  技术社区  ›  Shereif SRF

如何使用gtest到另一个测试的返回值

  •  0
  • Shereif SRF  · 技术社区  · 7 年前

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

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

    我需要获得第一个测试的返回值(结果),并在第二个测试中作为动态测试使用(如果第一个测试失败,那么程序应该终止,并显示错误详细信息)。当第一个测试和第二个测试正常(未失败)时,第一个和第二个测试的返回值应参数化为第三个测试。

    所需算法(作为您的帮助):

    步骤1:运行第一个测试 addNumbers(14, 23) ;

    步骤2:检查预期值和返回值(A);

    步骤3.2:如果正常(未失败),则运行第二个测试 subtractNumbers(A, 12)

    步骤4:检查预期值和返回值(B);

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

    步骤5.2:如果正常(未失败),则运行第三个测试 addNumbers(A,B) ;

    1 回复  |  直到 7 年前
        1
  •  0
  •   Michael Albers    7 年前

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