【发布时间】:2019-01-28 21:54:49
【问题描述】:
每个人。
我是单元测试的新手,不了解它。
我有一个具有 process() 函数的模块。内部 process() 功能模块做了很多不平凡的工作。任务是检查模块的输出。
例如,在 process() 方法中有一个方法 calculateDistance() 计算距离值。测试要求听起来像“检查模块计算距离......”
据我所知,我必须:
- 准备输入数据
- 调用模块的process()方法
- 用手计算距离
- 获取模块的距离输出值
- 将此值与计算值进行比较。
但是对于一些琐碎的情况来说很容易,例如一些算术运算。但是如果在 calculateDistance() 里面有很多公式怎么办。我应该如何计算这个距离的值?我是否应该将 calculateDistance() 函数中的所有源代码复制到测试代码中,以便从第 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() 方法相同的方式计算距离值(这里是代码重复)并将该值与输出距离进行比较?
【问题讨论】:
-
SO 可能不是问这个问题的地方,那里有很多很好的单元测试资源。 SO 更适用于特定的软件问题,向我们展示示例,我们可以提供帮助。
标签: c++ unit-testing