【问题标题】:Verifying exception messages with GoogleTest使用 GoogleTest 验证异常消息
【发布时间】:2013-09-12 21:20:57
【问题描述】:

是否可以验证异常抛出的消息?目前可以:

ASSERT_THROW(statement, exception_type)

这一切都很好,但是我在哪里可以找到一种方法来测试 e.what() 真的是我想要的。这不能通过谷歌测试吗?

【问题讨论】:

标签: c++ exception-handling googletest


【解决方案1】:

以下内容将起作用。只需以某种方式捕获异常,然后在 what() 调用上执行 EXPECT_STREQ

#include "gtest/gtest.h"

#include <exception>

class myexception: public std::exception
{
  virtual const char* what() const throw()
  {
    return "My exception happened";
  }
} myex;


TEST(except, what)
{
  try {
    throw myex;
  } catch (std::exception& ex) {
      EXPECT_STREQ("My exception happened", ex.what());
  }

}

int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

【讨论】:

  • 虽然我非常感谢您的回答,但我知道如何以其他方式做到这一点(并且已经这样做了一段时间)。我只是想知道我是否缺少对 ASSERT_THROW 宏的某种扩展,它允许我在宏本身中检查 e.what() 。我不想自己编写 try/catch 处理程序。
  • 这是一个不好的方法。它测试是否抛出异常,它只检查是否看到正确的消息如果抛出异常。
  • @Mr.Boy 那么有什么好的方法呢?你能测试它是否被抛出,并且消息是预期的吗?许多错误路径可能会抛出runtime_error,我如何测试是否抛出了某个运行时错误而不只是为了测试而更改代码?
  • 您可以在应该抛出异常的指令之后的 try 块中添加FAIL()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2014-07-15
  • 2022-06-10
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多