Expect_throw-实际:它抛出不同类型的Google测试

EXPECT_THROW - Actual: it throws a different type, google tests

本文关键字:同类型 Google 测试 throw- 实际 Expect      更新时间:2023-10-16

嗨,我有这个构造函数

Matrix::Matrix(size_t row, size_t col)
{
  if(row < 1 || col < 1)
    throw new std::runtime_error("Minimalni velikost matice je 1x1");
  matrix = std::vector<std::vector< double > >(row,std::vector<double>(col, 0));
}

和此测试

Matrix *TestedMatrix;
EXPECT_THROW(TestedMatrix = new Matrix(-2,3),std::runtime_error );

,但是我仍然得到该exction的类型不同。我也尝试了std::runtime_error*,但结果是相同的。我想起初使用Expect_any_throw,但没有在我的代码覆盖范围内显示。感谢帮助 !:)

不要调用 new

Matrix::Matrix(size_t row, size_t col)
{
  if(row < 1 || col < 1)
    throw std::runtime_error("Minimalni velikost matice je 1x1");
  matrix = std::vector<std::vector< double > >(row,std::vector<double>(col, 0));
}

new将返回void*,这就是为什么您会得到"异常为不同的类型"错误。

假设size_tstd::size_t的别名,您在此处看到签名到未签名的转换(并且您的编译器应警告您;检查您是否已启用了足够的警告在您的构建中)。

-2被转换为一个非常大的正值(几乎SIZE_MAX),因此很有可能是构造函数抛出std::bad_alloc

您需要将0传递给构造函数以行使抛出std::runtime_error*的代码路径。(您可以将支票简化为if (!row || !col),因为0是唯一的无符号值小于1)。

EXPECT_THROW(Matrix(0,3), std::runtime_error*);
EXPECT_THROW(Matrix(3,0), std::runtime_error*);

顺便说一句,我建议您按Value 扔,而不是使用new