使用向量运算的单元测试中出现未处理的C++异常

Unhandled C++ Exception in Unit Test with Vector Operations

本文关键字:未处理 C++ 异常 单元测试 向量 运算      更新时间:2023-10-16

我正在单元测试一个例程,该例程应该从一个向量中获取一些数据,对其进行处理,并将其放回一个向量向量中。然而,在我的Visual Studio 2015单元测试中,它抛出了一个未处理的C++异常(下面是完整的错误描述),我的代码出了什么问题?

此测试方法引发错误:

TEST_METHOD(Graph_Equations_Correct) {
    vector< vector<float> > graph;
    int i = 1;
    while (i < 10) {
        drawGraph();
        Assert::AreEqual(graph.at(i)[2], history.at(i)[4]);
        i++;
    }
}

结果StackTrace:在c:\program files(x86)\microsoft visual studio 14.0\vc\include\vector:line 1789中的std::vector>,std::分配器>>::_Xran()在c:\program files(x86)\microsoft visual studio 14.0\vc\include\vector:line 1208中的std::vector>,std::分配器>>::at()在c:\users\george\documents\history testing 2\UnitTest1\UnitTest1.cpp:行32中的UnitTest1::MyTests::Graph_Equations_Correct()结果消息:未处理的C++异常

这是DrawGraph():

vector< vector<float> > graph;
void drawGraph() {
    float m, c, j, x1, x2;
    vector<float> values;
    int i = 0;
    while (i < history.size() - 1) {
        j = i + 1;
        x1 = history[i][0];
        x2 = history[j][0];
        m = history[j][3] / history[j][2];
        c = history[i][1] - m*x2;
        i++;
        values.push_back(x1);
        values.push_back(x2);
        values.push_back(m);
        values.push_back(c);
        graph.push_back(values);
        values.clear();
    }
};

历史是另一个载体。在第一行上,它只有两个值,但随后的每一行(又增加了14个)都有5个值,这就形成了一个15 x 5的值,顶部行上只有2个值。我已经调试过了,这是正确的。另外,替换Assert行中的图形引用可以消除错误,所以我认为这就是问题所在。

根据您发布的内容,问题是您有两个不同的graph向量,一个本地向量和一个全局向量。

您在drawGraph函数中填充全局函数,但在测试函数中访问本地未填充的函数。

如果使用vector::at()而不是operator[]来访问测试函数中的元素,而不是未处理的异常,则会引发out_of_range异常,从而更清楚地指出问题。