EXPECT_THROW - 实际:它抛出不同的类型,google 测试
EXPECT_THROW - Actual: it throws a different type, google tests
大家好,我有这个构造函数
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 );
但我仍然收到不同类型的例外情况。我也试过 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
将 return 变为 void*
,这就是为什么您会收到 "exception is of different type" 错误。
假设 size_t
是 std::size_t
的别名,您会在此处看到 signed-to-unsigned 转换(并且您的编译器应该警告您;检查您是否已启用您的构建中有足够的警告)。
-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*);
顺便说一句,我建议您按值 抛出 而不是使用 new
.
大家好,我有这个构造函数
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 );
但我仍然收到不同类型的例外情况。我也试过 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
将 return 变为 void*
,这就是为什么您会收到 "exception is of different type" 错误。
假设 size_t
是 std::size_t
的别名,您会在此处看到 signed-to-unsigned 转换(并且您的编译器应该警告您;检查您是否已启用您的构建中有足够的警告)。
-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*);
顺便说一句,我建议您按值 抛出 而不是使用 new
.