【问题标题】:How to write a unit test如何编写单元测试
【发布时间】:2019-01-28 21:54:49
【问题描述】:

每个人。

我是单元测试的新手,不了解它。

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

例如,在 process() 方法中有一个方法 calculateDistance() 计算距离值。测试要求听起来像“检查模块计算距离......”

据我所知,我必须:

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

但是对于一些琐碎的情况来说很容易,例如一些算术运算。但是如果在 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


【解决方案1】:

但是如果在 calculateSmth() 里面有很多公式呢?

重构代码并分解这些公式以分离函数并单独测试它们。

【讨论】:

    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2012-01-06
    • 2019-03-17
    相关资源
    最近更新 更多