单元测试期间的隔离和测试数据的重复代码

时间:2013-11-14 07:00:13

标签: unit-testing tdd

我正在使用Java编写一些应用程序并编写JUnit测试。我有关于单元测试的设计问题。我有一个类读取文件和创建对象称为 Song ,通过读取不同的行并根据某种算法进行解析。我已经写了一些单元测试。解析后的下一步是根据 Song 对象的某些属性将该歌曲实际转换为其他格式。我有另一个作为翻译的班级。有一种方法转换,它将 Song 对象作为输入。现在进行翻译单元测试。我需要一个具有所有有效属性的Song对象。我在这里很困惑,我应该通过添加与解析器相同的功能来创建一个新的 Song 对象,或者我应该调用解析器服务为我做这个。如果我采取第二种选择,我觉得它不会被孤立。但在第一个选项中,它就像重复的代码。有人可以指导我吗?

1 个答案:

答案 0 :(得分:0)

当这个数据很复杂时,使用Builder来为SUT调用创建输入数据没有任何问题,但是我在这里看到了2个风险。

  • 如果构建器失败,您的测试也会失败,但不应该。正如您所说,单元测试应该与外部代码隔离开来。
  • 如果您使用代码覆盖率作为度量来评估单元测试的好坏程度(我并不是说这是正确的),通过查看构建器的覆盖范围,您很可能会认为它已经过测试,但显然不是

我的观点是,没有适合所有场景的最佳解决方案。如果输入数据不是很复杂,请尝试“手动”构建它,否则使用构建器。