如何自定义 Google 测试失败消息?

How can I customize Google Test failure messages?

我写了一个 Google 测试,如下所示,它将一些计算值与存储在 CSV 文件中的预期值进行比较。

class SampleTest : public ::testing::Test{
public:

    void setupFile(const std::string& filename) {
       // open csv file here
    }

    void checkRow(ComputedRowValue val) {
        CSVParsedOutput out;
        m_csv_f.readAndParseLine(out);
        EXPECT_EQ(out.field1, val.field1);
        EXPECT_EQ(out.field2, val.field2);
        EXPECT_EQ(out.field3, val.field3);
        m_csv_line++;
    }


protected:
    CSVFile m_csv_f; // CSV file with expected results
    int m_csv_line = 0;
};

这将是 运行 一些巨大的文件大小和 EXPECT_EQ 当失败时只会告诉我哪个值不匹配。如何覆盖 EXPECT_EQ 输出的错误消息以同时打印 m_csv_line?

您可以将 EXPECT_EQ 用作流,这样: EXPECT_EQ(out.field1, val.field1) << m_csv_line; 应该做你想做的。

如果您在单个检查中有多个断言,请考虑使用 SCOPED_TRACE 宏,如 here 所述。 而不是

EXPECT_EQ(out.field1, val.field1) << "text";
EXPECT_EQ(out.field2, val.field2) << "text";
EXPECT_EQ(out.field3, val.field3) << "text";

你可以获得

SCOPED_TRACE("text");
EXPECT_EQ(out.field1, val.field1);
EXPECT_EQ(out.field2, val.field2);
EXPECT_EQ(out.field3, val.field3);

当你有复杂的输出时,这会更有帮助,比如

EXPECT(...)<<"text"<<custom_class_var<<int_var;
EXPECT(...)<<"text"<<custom_class_var<<int_var;
EXPECT(...)<<"text"<<custom_class_var<<int_var;

可以换成

std::stringstream message;
message<<"text"<<custom_class_var<<int_var;
SCOPED_TRACE(message.str());
EXPECT(...);
EXPECT(...);
EXPECT(...);