我正在构建一组基于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();
};
答案 0 :(得分:1)
“超出范围”错误来自于history.size()
为2
(push_back
)调用中的两个populateArray
;但是在您的测试中,您检查history[i]
i
从1
到10
。
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的评论。