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 );
,但是我仍然得到该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_t
是std::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
。
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- Google Sparsehash 在类型上使用 realloc(),这很难复制
- E/libc++abi:终止于类型为google::protobuf::FatalException的未捕获异常
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 如何从Google Proto Buf消息中的属性名称中找到消息类型
- CRTP 模式 但是在数据结构中存储非同构类型
- STL 类型的 Google 测试和运算符<<重载
- Expect_throw-实际:它抛出不同类型的Google测试
- 私有结构(在类中定义)不能用作属于同一类的函数的返回类型吗
- C++ 管理多个同质数据类型
- 如何使用Google Mock更改指定对象的类型
- 在同一行读取具有多个类型的文件
- Google的Protocol Buffer在实践中对浮点类型的处理有多跨平台?
- c++, google test/mock:测试和对象类型的断言
- 链接器错误 - 链接两个"application"类型的项目以使用 Google 测试
- C++对同一类类型的引用公开私有成员
- 在同一类中向前声明类型