测试数据工厂方法是危险的还是有益的?

时间:2017-03-06 18:48:43

标签: java unit-testing design-patterns junit

使用JUnit进行单元测试时遇到了问题,我想知道是否有标准解决方案。

我开始使用Podam生成随机测试数据,但同事正确地指出这可能导致意外的单元测试失败。一方面,这显然很糟糕,可能会使调试成为一个真正的痛苦。另一方面,它可以通过突出代码问题来完成它的工作。

我确定了我认为解决问题的3种方法。我错过了任何选择吗?这些都被认为是标准做法吗?

  1. 生成随机测试数据的工厂方法
  2. 返回标准数据的工厂方法
  3. 手工制作的方法,没有工厂。每个单元测试在内部声明自己的输入数据和预期输出。
  4. 此外,我认为每种方法都有以下优点和缺点。我错过了任何重要的设计考虑因素吗?

    优点:

    1. 通过覆盖生成的值进行稳健的测试,轻松创建,半确定性。
    2. 易于创建,易于调试。
    3. 中等稳健的测试和适度的调试。
    4. 缺点:

      1. 意外的单元测试失败(但至少你发现了这个问题)。更难调试。
      2. 非稳健性测试
      3. 人为错误,冗余和冗长的代码,更少的可维护性,多样化的实现。

1 个答案:

答案 0 :(得分:0)

我认为良好的单元测试需要完成其工作并专注于强大的测试。

我更喜欢选项1.使用随机数据可能会导致意外的单元测试失败,但在一天结束时这是一件好事,因为您涵盖了每个技术上可能的场景,包括开发人员不会想到的场景。 / p>

选项1可能会使自己调试更多工作,但如果测试的方法很简单,那么这不太可能是一个重要的开销。如果测试的方法非常复杂,那么无论如何都可能很难调试,可能需要分解。

选项2和3引入了人为错误。最大限度地减少人为错误是任何计划的关键目标。 3也是冗长且不可维护的。这些问题最终可能会花费更多的时间和精力,而不是专门用于额外的调试。

我的猜测是,从长远来看,#1将耗费更少的时间和精力。这只是猜测,而不是主要关注点。主要关注的是#1是确保执行稳健测试的正确方法。