C ++单元测试中的返回分区错误地返回0

时间:2015-12-18 13:36:38

标签: c++ unit-testing

我使用构建的Visual Studio 2015框架对C ++函数进行单元测试。但是,测试失败并且说实际值为0.如果我返回(y2 - y1),那么我得到99的值。如果我返回(x2 - x1),我得到86400,但如果我返回{{ 1}}我得到零。为什么是这样?我是否需要对(y2 - y1) / (x2 - x1)做些什么来告诉它处理花车?即使我在浮点数中进行除法然后返回变量,我仍然得到零?

Assert::AreEqual()

我用以下单元测试来调用它:

float averageGradient(int x1, int x2) {
    //do some maths, the result of which: y1=-39, y2= 60, x1=683675, x2=770075
    float m = (y2 - y1) / (x2 - x1);
    return (y2 - y1) / (x2 - x1);
}

2 个答案:

答案 0 :(得分:2)

  

即使我在浮点数中进行除法然后返回变量,我仍然得到零?

这不是你正在做的事情。

float averageGradient(int x1, int x2) {
    //do some maths, the result of which: y1=-39, y2= 60, x1=683675, x2=770075
    float m = (y2 - y1) / (x2 - x1);
    return (y2 - y1) / (x2 - x1);
}

首先对int进行除法,然后将结果(0)分配给float。然后再次对int s进行除法并返回。

整数除法的结果只是截断它并给出一个int作为结果。如果你想得到一个浮动结果,你必须在进行除法之前向float施放至少一个参数:

float averageGradient(int x1, int x2) {
    //do some maths, the result of which: y1=-39, y2= 60, x1=683675, x2=770075
    float m = (y2 - y1) / (float)(x2 - x1);
    return m;
}

应该这样做。

您还从哪里获取y1y2,因为您没有将它们作为参数?那些全局变量吗?

答案 1 :(得分:-2)

您应该返回您声明为浮点数而不是计算的Enum变量。您的回访应该简单地说:m