表达式:VS2015单元测试框架中的矢量测试超出范围错误

时间:2015-12-15 14:35:16

标签: c++ unit-testing vector

我正在构建一组基于Microsoft的本机框架的基于Visual Studio 2015的单元测试。我使用下面的代码显示,编译和运行没有问题。但是,当我运行测试时,它会抛出一个错误(下面的完整消息)。在drawGraph之前,调用一个例程,它将历史记录初始化为float Data[15][5],然后完全填充15,数组为5.我做错了什么?

vector< vector<float> > history;

float drawGraph(float graph[4][10]) {
    float m, c, j, x1, x2;
    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++;
        graph[0][i] = { x1 };
        graph[1][i] = { x2 };
        graph[2][i] = { m };
        graph[3][i] = { c };
    }
    return graph[0][0];
};

这是我的测试代码:

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

这是它抛出的结果/错误:

  

结果StackTrace:   at std :: vector&gt; ::运算符在c:\ program files(x86)\ microsoft visual studio 14.0 \ vc \ include \ vector:line 1233       在UnitTest1 :: MyTests :: Graph_Equations_Correct()在c:\ users \ george \ documents \ history testing 2 \ unittest1 \ unittest1.cpp:第32行   结果消息:在函数std :: vector&gt; :: operator [],c:\ program files(x86)\ microsoft visual studio 14.0 \ vc \ include \ vector line 1233中检测到无效参数。表达式:&#34; out of范围&#34;

编辑:

我打电话的第一个测试是:

TEST_METHOD(Array_Populates)
{
    int i = 0;
    while (i < 10) {
        populateArray(dummyData[i][0], dummyData[i][1]);
        //Assert::AreEqual(history[i][0], dummyData[i][1]);
        i++;
    }
    int j = 0;
    while (j < history.size()) {
        Assert::AreEqual(dummyData[j][0], history.at(j)[1]);
        j++;
    } 
}

我的代码中的例程是:

void populateArray(int input, int time) {
    values.push_back(time);
    values.push_back(input);
    if (history.size() > 0) {
        values.push_back(values[0] - history.back()[0]);
        values.push_back(values[1] - history.back()[1]);
        values.push_back(values[3] / values[2]);
    }

    history.push_back(values);
    values.clear();
};

1 个答案:

答案 0 :(得分:1)

“超出范围”错误来自于history.size()2push_back)调用中的两个populateArray;但是在您的测试中,您检查history[i] i110

while (i < 10) {
    i++;
    Assert::AreEqual(history[i][4], graph[2][i]);
}

在您的单元测试中,不应将任何内容视为100%确定,请std::vecor::at(size_type pos)优先于std::vector::operator[](size_type pos);有关this good answer from another SO question的更多信息。

此外,请考虑Bo Persson的评论。