gpt4 book ai didi

unit-testing - 如何测试具有需要手动计算的返回值的函数

转载 作者:行者123 更新时间:2023-11-28 20:28:37 25 4
gpt4 key购买 nike

假设我们有以下伪代码:

class Position{
int x, y
}

class Body{
Body parent;
Position start; //always initialized relative to parent's
}

class OrbitingBody extends Body{
int angularVelocity; // angles travelled per day
int radius; // radius of the orbit, like earths orbit radius around sun

//returns its position after 'days' days relative to its parent
Position getRelativePosition(int days) {
totalAngles = self.angularVelocity * days
roundedAngle = totalAngles % 360
return Math.polar2Cartesian(roundedAngle, self.radius)
}

// returns position relative to the absolute parent, i.e Sun
Position getAbsolutePosition(int days) {
position = self.getRelativePosition(days)
if (self.parent) {
parentPosition = parent.getAbsolutePosition(d)
// Math.relativePosition converts position with respect to parents'
position = Math.relativePosition(position, parentPosition)
}
return position
}
}

class Sun extends Body{
// position will be (0,0)
}

class Planet extends OrbitingBody{
//parent will be Sun
}

class Moon extends OrbitingBody{
//parent will be a Planet
}

以上类(class)描述了我们太阳系的基本模态。

getAbsolutePosition 方法可找到月亮相对于太阳的位置。对于一个行星来说,这是直截了当的。

对于月亮来说,有一个复杂的问题,因为它返回相对于太阳的位置。 getRelativePosition 将始终返回相对于其父级的位置,即对于月球,它将返回 w.r.t 地球。

我的目标是对 getAbsolutePosition 进行单元测试。

如果我必须为 moon 测试这个,我必须为一堆测试用例找出需要相当多手动工作的返回值。如果数学逻辑有任何变化,那就意味着我必须再次手动查找更新后的返回值。

测试此类功能的良好软件工程实践有哪些?

最佳答案

您的假设是正确的,即如果基本假设发生变化并且预期结果会因此发生变化,则需要“繁重的计算工作”以确定“预期”值以检查您的实际结果的测试确实会受到影响.

我在这里看到一个选项:如果可能,也只需计算预期的测试结果,不要自己编写代码。您会发现,如果您创建测试代码和生产代码,您很可能会犯同样的错误两次。因此,即使您尝试“以不同的方式”实现所需的方程式,您进行测试和生产代码也不是很理想。

因此:如果可能,找其他人编写计算 逻辑以在您的测试用例中使用。也许该代码在某种程度上被简化了——那些“生成器”不需要是完美的;但它们应该为您将使用它们的那些角落提供正确的结果。

关于unit-testing - 如何测试具有需要手动计算的返回值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40684446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com