问题:我正在尝试使用GTest作为测试框架的分配。代码定义了一个"通用"文件中为系统定义了异常,我在代码中这样使用:
throw ExceptionType::OUT_OF_RANGE;
然而,当运行GTest时,我得到以下消息:
unknown file: Failure
Unknown C++ exception thrown in test body.
我的问题是:我将如何运行gdb与GTest框架来跟踪这个bug,它是否与代码中定义的异常或其他东西有关。
这是正在讨论的失败测试:
/** Test that matrix initialization works as expected */
TEST(StarterTest, InitializationTest) {
auto matrix = std::make_unique<RowMatrix<int>>(2, 2);
// Source contains too few elements
std::vector<int> source0(3);
std::iota(source0.begin(), source0.end(), 0);
EXPECT_TRUE(ThrowsBustubException([&]() { matrix->FillFrom(source0); }, ExceptionType::OUT_OF_RANGE));
// Source contains too many elements
std::vector<int> source1(5);
std::iota(source1.begin(), source1.end(), 0);
EXPECT_TRUE(ThrowsBustubException([&]() { matrix->FillFrom(source1); }, ExceptionType::OUT_OF_RANGE));
// Just right
std::vector<int> source2(4);
std::iota(source2.begin(), source2.end(), 0);
EXPECT_NO_THROW(matrix->FillFrom(source2));
for (int i = 0; i < matrix->GetRowCount(); i++) {
for (int j = 0; j < matrix->GetColumnCount(); j++) {
const int expected = (i * matrix->GetColumnCount()) + j;
EXPECT_EQ(expected, matrix->GetElement(i, j));
}
}
}
你可以试试:
throw Exception(ExceptionType::OUT_OF_RANGE, "out of range");
你应该抛出属于标准库的异常,并使用自定义异常(ExceptionType::OUT_OF_RANGE)。