我目前正在尝试创建一些类来进行傅里叶变换。 我试图先创建一些单元测试,然后构建基本功能。
这个问题就是,好吧,我可以编写一个测试来查看算法是否有效,并且我知道预期的结果。然后我开始构建大算法,如果它工作,我的单元测试将通过。
我的问题是,它不是真正的TDD。因为通常您创建的测试可以测试类的一个非常基本的功能。现在我的班级基本上执行一个大算法,我无法测试算法的较小部分,因为它们不公开(我总是被告知你永远不想测试私有方法)。
你是如何处理的?
答案 0 :(得分:3)
我看到了两种可能的方式:
答案 1 :(得分:1)
我最近一直在与“什么是单位?”作斗争?这确实是一个棘手的问题。
如果您有理由相信FFT的子单元特别容易出错,那么就要设置边界条件并打破私有方法免除的规则。
另一种说法相同的方法是子单元实际上是一个单元,其服务由FFT使用,然后你就没有规则。
答案 2 :(得分:1)
如果你的类只有一个可测试的方法(根据你只测试公共方法的标准),那么你别无选择,只能测试那种方法,对吧?但这并不意味着它不是TDD,而且你当然可以测试各种输入值。这里的大部分工作都是找到有趣的值 - 你的转换可能失败的边缘情况是什么?是否有任何无效输入以及如何处理?
是否有某种方法可以对许多值进行算法验证,例如调用已知良好的例程,使用一些关键的傅立叶相关识别,或者使用FFT来执行multiplication?
答案 3 :(得分:0)
我认为如果您无法测试算法的各个组件,则代码是紧密耦合的,或者代码是非常程序化的。
您可能必须将代码定义为单位,并将这些单位作为受保护的方法。只要该方法受到保护,它就会发送一条明确的消息,表明它不属于API。