测试数学例程的最佳实践是什么?我正在使用下面的例程并尝试为它编写单元测试(我只是在学习单元测试)。我正在使用Visual Studio内置框架。
每当我开始尝试使用Assert
命令来检查已知正确答案的实际值时,我最终会编写我正在测试的相同代码以进行比较,这显然无法证明所有。解决这个问题的传统方法是什么?
int averageGradient(int x1, int x2, float m) {
int i = 0, y1 = 0, y2 = 0;
while (y1 != 0 && y2 != 0) { //if both y values haven't been solved then keep trying
if (x1 >= graph[0][i] && x1 < graph[1][i] && y1 == 0) { // if x1 lies in the first straight line segment
y1 = (graph[2][i] * x1) + graph[3][i]; // then calculate it's y value (y1)
}
else { i++; } //otherwise incriment i to check the next straight line segment
if (x2 >= graph[0][i] && x2 < graph[1][i]) { //try the same thing for x2
y2 = (graph[2][i] * x2) + graph[3][i]; //calculate its y value (y2)
}
else { i++; }
}
m = (y2 - y1) / (x2 - x1);
return m;
};
答案 0 :(得分:3)
答案 1 :(得分:1)
您预先计算了预期结果(可能是数学应用程序或表格数据)并将其设置为#34;硬编码&#34;断言中的值:
AssertEqual(calculatePiFirst6Decimals(), 3.141519);
方法是测试已知值/结果(否则没有点测试某些东西,无法验证)。然后,人们也应该测试已知的边缘情况(例如,当参数采用极值或需要特别小心时)
答案 2 :(得分:0)
我不明白。
var a = knownParameter1;
var b = knownParameter2;
var c = knownParameter3;
var ret = knownReturnValue;
Assert(ret == averageGradient(a, b, c));
你没有再写相同的代码......