如何自定义 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(...);
我写了一个 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(...);