如何编写单元测试

How to write a unit test

本文关键字:单元测试 何编写      更新时间:2023-10-16

everyone.

我是单元测试的新手,无法理解它。

我有一个具有 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(( 方法相同的方式计算距离值(这里是代码重复(并将该值与输出距离进行比较?

但是如果在 calculateSmth(( 中有很多公式呢?

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