我有些困惑应该花费多少时间来编写单元测试。
假设我有一个简单的函数,像这样:
appendRepeats(StringBuilder strB, char c, int repeats)
[此函数将字符 c 重复多次附加到字符串 strB 中。 例如:
strB = "hello"
c = "h"
repeats = 5
// result
strB = "hellohhhhh"
对于这个函数的单元测试,我感觉已经有很多可能性了:
- AppendRepeats_ZeroRepeats_DontAppend(追加重复零次,不追加)
- AppendRepeats_NegativeRepeats_DontAppend(追加负数次,不追加)
- AppendRepeats_PositiveRepeats_Append(追加正数次,追加)
- AppendRepeats_NullStrBZeroRepeats_DontAppend(空字符串B追加重复零次,不追加)
- AppendRepeats_NullStrBNegativeRepeats_DontAppend(空字符串B追加负数次,不追加)
- AppendRepeats_NullStrBPositiveRepeats_Append(空字符串B追加正数次,追加)
- AppendRepeats_EmptyStrBZeroRepeats_DontAppend(空串B追加重复零次,不追加)
- AppendRepeats_EmptyStrBNegativeRepeats_DontAppend(空串B追加负数次,不追加)
- AppendRepeats_EmptyStrBPositiveRepeats_Append(空串B追加正数次,追加)
- 等等等等。字符串B可以为空或有值。C可以为空或有值。重复次数可以是负数、正数或零。
这似乎已经有 3 * 2 * 3 = 18 个测试方法了。如果这些函数也需要测试特殊字符、Integer.MIN_VALUE、Integer.MAX_VALUE 等等,可能还会有更多的测试方法。我的停止线应该是什么呢?
对于我的程序,我应该假设:
- 字符串B只能为空或有值
- C 有值
- 重复次数只能为空或为正数
抱歉打扰了。我真的很困惑,我应该在单元测试中变得多么谨慎。我应该坚持我的假设范围内吗,还是说这是不好的做法,我应该为每种情况都有一个方法,在这种情况下,单元测试方法的数量将迅速呈指数级增长。