1

为了确保这个问题对于常见问题解答中的标准足够具体,我只是问以下问题:哪些资源讨论了将单元测试应用于非常特定的功能的最常见方法,通常是依赖供应商数据的功能或其他非常具体的数据,例如合成数据对测试没有帮助?如果您对更多背景感兴趣,请阅读下文。

背景:

我在日常代码开发中经常编写单元测试,但我也尝试使我的代码尽可能抽象和可重用。在我加入的一个新项目中,在许多情况下,代码由非常具体的函数组成,这些函数旨在接受非常具体格式化的输入数据并将输出数据存储到数据库表中。大部分输入数据由供应商数据或其他内部数据组成,并通过调用供应商和内部 API 进行访问。

到目前为止,我唯一的想法是测试输入数据格式错误时遇到的各种故障。我肯定会写这个测试,但就测试而言,它对我们的团队来说毫无用处。更有用的测试应该检查这些数据操作的逻辑是否正确,这涉及根据输入数据检查输出数据的准确性。

不幸的是,我没有任何基准数据集可以明确知道输出应该是什么。其他人建议创建我自己的合成输入数据(如全 1 的矩阵或我可以预测输出应该是什么人为的东西)。不幸的是,该函数执行的操作是非常非线性的(通过加权百分位数对事物进行分类并获取每个百分位数分组的汇总统计信息)。任何基于完全人为的合成输入数据的测试对我们来说也不是很有用,而且格式化它然后写入一些合成输出数据库表并读取它以检查单元测试类型的时间成本使这样的测试毫无价值。

我知道单元测试应该只测试一种行为。我只是不确定如何分解一个函数,该函数执行诸如聚合加权百分位数分组中的复杂统计数据并将其归结为“只是一件事”进行测试的功能。

在此设置中使用了哪些标准?

4

1 回答 1

0

我用非常大的方法遇到了类似的问题。我的建议是使用依赖注入重构代码并遵守单一职责原则。然后根据其职责测试每个类。

于 2013-01-10T23:14:32.873 回答