如何编写单元测试

时间:2018-08-22 15:26:30

标签: c++ unit-testing

所有人。

我是单元测试的新手,对此一无所知。

我有一个具有process()函数的模块。在process()函数模块内部,做了很多不平凡的工作。任务是检查模块的输出。

例如,在process()方法内部有一种方法calculateDistance()用于计算距离值。测试要求听起来像“检查模块是否计算出距离...”

据我了解,我必须:

  1. 准备输入数据
  2. 调用模块的process()方法
  3. 手动计算距离
  4. 获取距离的模块输出值
  5. 将此值与计算得出的值进行比较。

但是对于一些琐碎的情况,例如某些算术运算,这很容易。但是,如果在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()方法相同的方式计算距离值(这里是代码重复),然后将此值与输出距离进行比较?

1 个答案:

答案 0 :(得分:-1)

  

但是,如果在calculateSmth()里面有很多公式怎么办。

重构代码并分解这些公式以分离函数并分别进行测试。