代码之家  ›  专栏  ›  技术社区  ›  wl2776

谷歌测试:消息不会打印在成功的断言上

  •  0
  • wl2776  · 技术社区  · 6 年前

    我试图在成功的单元测试中发出警告,这是用GTest创建的。

    我希望下面的代码会在某个地方打印“我的警告信息”:

    #include <gtest/gtest.h>
    
    GTEST_API_ int main(int argc, char** argv)
    {
        testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }
    
    TEST(suite, name)
    {
        EXPECT_TRUE(true) << "My warning message";
    }
    

    然而,我在控制台和XML文件中都没有看到预期的字符串。

    我曾尝试在调试器中单步执行代码,并看到该字符串存储在类的对象中 ::testing::AssertionResult 在宏内部创建 EXPECT_TRUE .

    然而,目前尚不清楚该怎么做才能让它出现。

    将Googletest更新为master branch负责人没有帮助。

    0 回复  |  直到 6 年前
        1
  •  1
  •   mabraham Frahm    4 年前

    所有断言/期望仅当断言 失败 .在这种情况下:

    EXPECT_TRUE(true) << "My warning message";
    

    它永远不会被触发。您可以通过以下方式确认:

    EXPECT_TRUE(false) << "My warning message";
    

    然而,使用这种方法会使你的测试失败。如果希望在测试成功时打印消息,可以使用 SUCCEED 还有一种习俗 TestEventListener :

    class SuccessListener : public testing::EmptyTestEventListener {
      void OnTestPartResult(const testing::TestPartResult& result) override {
        if (result.type() == testing::TestPartResult::kSuccess) {
          printf("%s\n", result.message());
        }
      }
    };
    
    int main(int argc, char* argv[]) {
        ::testing::InitGoogleTest(&argc, argv);
        testing::UnitTest::GetInstance()->listeners().Append(new SuccessListener);
        return RUN_ALL_TESTS();
    }
    
    
    TEST(SuccessPrintTest, SuccessPrint) {
        SUCCEED() << "Custom message";
    }
    

    输出为:

    [ RUN      ] SuccessPrintTest.SuccessPrint
    Succeeded
    Custom message
    [       OK ] SuccessPrintTest.SuccessPrint (0 ms)
    

    如果打印到控制台,这将非常冗长——您可能希望将其重定向到一个文件(由 SuccessListener ).