4

我目前正在尝试创建一些类来进行一些傅立叶变换。我试图通过首先创建一些单元测试,然后构建基本功能来做到这一点。

问题在于,我可以编写一个测试来查看算法是否有效,并且我知道预期的结果。然后我开始构建大算法,如果它有效,我的单元测试将通过。

我的问题是,它不是真正的 TDD。因为通常您创建测试来测试一个类的一个非常基本的特性。现在我的班级基本上执行一个大算法,我无法测试算法的较小部分,因为它们不是公共的(我一直被告知你永远不想测试私有方法)。

你如何处理这个问题?

4

4 回答 4

3

我看到了两种可能的方法:

  1. 如果可能 - 将算法实现移动到另一个类并将其拆分为方法。测试方法后。
  2. 只需编写一堆涵盖可能的正常情况、边缘情况和错误情况的测试。
于 2011-04-17T08:14:32.973 回答
1

我最近一直在与“什么是单位?”作斗争。这确实是一个棘手的问题。

如果你有理由相信 FFT 的子单元特别容易出错,那么就设置边界条件并打破私有方法可以豁免的规则。

另一种说法是,子单元实际上是一个其服务被 FFT 使用的单元,那么你就没有违反任何规则。

于 2011-04-17T08:15:22.630 回答
1

那么如果你的类只有一个可测试的方法(根据你只测试公共方法的标准),那么你别无选择,只能测试那个方法,对吧?然而,这并不意味着它不是 TDD——您当然可以测试大量的输入值。这里的大部分工作将是找到有趣的值——你的转换可能失败的边缘情况是什么?是否有任何无效输入以及如何处理?

是否有某种方法可以对许多值进行算法验证,例如调用已知良好的例程,使用一些与傅立叶相关的关键识别,或者使用 FFT 进行乘法

于 2011-04-17T08:18:10.247 回答
0

我认为,如果您无法测试算法的各个组件,那么代码要么非常紧密耦合,要么代码非常程序化。

您可能必须将代码定义为单元并将这些单元设置为受保护的方法。只要方法受到保护,它就会发送一条明确的消息,表明它不是 API 的一部分。

于 2011-04-17T08:17:23.713 回答