2

私はspdlogの最新のコミットにいます( std出力に関する問題があり、明らかに解決されています)、出力をstd::coutからspdlogに切り替えています。

私のグーグルテストは std::cout をリダイレクトするので、スタブ関数の出力を確認できます:

class MyTest : public testing::Test
{
protected:
        void SetUp() override
        {            
            sbuf = std::cout.rdbuf();
            std::cout.rdbuf(buffer.rdbuf());
            auto console = spdlog::stdout_color_mt("console");
            auto err_logger = spdlog::stderr_color_mt("stderr");            
        }
        void TearDown() override
        {
            std::cout.rdbuf(sbuf);         
        }
        std::stringstream buffer;
        std::streambuf* sbuf;
}

次に、テスト内で次のように使用します。

doSomethingThatWritesToStdOut();
std::string teststr = buffer.str();
EXPECT_TRUE(teststr.find("Some output string") != std::string::npos);

doSomethingThatWritesToStdOutの内容をに変更すると、これは機能しません

spdlog::get("console")->debug("Some output string\n");

teststr値が空です..次のようにすると

 spdlog::get("console")->debug("Some output string\n");
 std::cout << "Some output string\n";

次に、teststr に「出力文字列」のインスタンスが 1 つ表示されます。Google テストでテストできるように、このロガーの出力をキャプチャする (またはロガーを変更する) にはどうすればよいですか?

4

1 に答える 1