所有人。
我是单元测试的新手,对此一无所知。
我有一个具有process()函数的模块。在process()函数模块内部,做了很多不平凡的工作。任务是检查模块的输出。
例如,在process()方法内部有一种方法calculateDistance()用于计算距离值。测试要求听起来像“检查模块是否计算出距离...”
据我了解,我必须:
但是对于一些琐碎的情况,例如某些算术运算,这很容易。但是,如果在calculateDistance()内部有很多公式,该怎么办?我应该如何计算该距离的值?我是否应该将所有源代码从computeDistance()函数复制到测试代码中,以从步骤3中计算该值?
这是源代码示例:
void process(PropertyList& propList)
{
m_properties = &propList;
...
for (int i = 0; i < m_properties.propertiesCount; i++)
{
calculateDistance();
}
}
void calculateDistance(int indx)
{
Property& property = m_properties->properties[indx];
property.distance = 0;
for (int i = 0; i < property.objectsCount - 1; i++)
{
property.distance += getDistanceBetweenObjs(i, i + 1);
}
}
int getDistanceBetweenObjects(indx1, indx2)
{
// here is some complex algorithm of calculating the distance
}
所以,我的问题是:我应该在知道最终距离值的情况下准备输入数据,然后将该值与输出值进行比较吗?还是应该获取输入数据结构,以与calculateDistance()方法相同的方式计算距离值(这里是代码重复),然后将此值与输出距离进行比较?
答案 0 :(得分:-1)
但是,如果在calculateSmth()里面有很多公式怎么办。
重构代码并分解这些公式以分离函数并分别进行测试。