在使用 JUnit 进行单元测试时,我遇到了一个问题,我想知道是否有标准解决方案。
我开始使用 Podam 生成随机测试数据,但一位同事正确地指出这可能会导致意外的单元测试失败。一方面,这显然很糟糕,并且可能使调试变得非常痛苦。另一方面,它可以通过突出显示代码问题来完成其工作。
我确定了我认为解决该问题的 3 种方法。我错过了什么选择吗?这些是否被视为标准做法?
- 生成随机测试数据的工厂方法
- 返回标准数据的工厂方法
- 手工制作,没有工厂。每个单元测试在内部声明自己的输入数据和预期输出。
此外,我认为每种方法都有以下优点和缺点。我是否遗漏了任何重要的设计考虑因素?
优点:
- 稳健的测试、轻松的创建、通过覆盖生成的值实现半确定性。
- 轻松创建,轻松调试。
- 测试比较稳健,调试也比较容易。
缺点:
- 意外的单元测试失败(但至少您发现了问题)。更难调试。
- 非稳健测试
- 人为错误、冗余且冗长的代码、难以维护、实现多样化。
最佳答案
我认为一个好的单元测试需要做好它的工作并专注于健壮的测试。
我更喜欢选项 1。使用随机数据可能会导致意外的单元测试失败,但归根结底这是一件好事,因为您涵盖了所有技术上可能的场景,包括开发人员不会想到的场景。
选项 1 可能需要更多的工作调试,但如果被测试的方法很简单,那么这不太可能是一个重要的开销。如果正在测试的方法极其复杂,那么无论如何调试都可能很困难,并且可能需要分解。
选项 2 和 3 会引入人为错误。最大限度地减少人为错误是任何计划的关键目标。 3 也很冗长且难以维护。这些问题最终可能会花费比专门进行额外调试更多的时间和精力。
我的猜测是,从长远来看,#1 会花费更少的时间和精力。这只是一个猜测,并不是主要问题。主要关注的是#1 是确保执行稳健测试的正确方法。
关于java - 测试数据工厂方法是危险还是有益?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42633279/