Algorithm 应用于私有方法的单元测试
我目前正在尝试创建一些类来进行一些傅立叶变换。 我试图先创建一些单元测试,然后构建基本功能 问题是,我可以写一个测试来看看算法是否有效,我知道预期的结果。然后我开始构建大算法,如果它有效,我的单元测试将通过 我的问题是,这不是真正的TDD。因为通常您会创建测试类的一个非常基本的特性的测试。现在我的类基本上执行一个大的算法,我不能测试算法的较小部分,因为它们不是公共的(我一直被告知你永远不想测试私有方法) 您如何处理此问题?我认为有两种可能的方法:Algorithm 应用于私有方法的单元测试,algorithm,unit-testing,testing,private-methods,Algorithm,Unit Testing,Testing,Private Methods,我目前正在尝试创建一些类来进行一些傅立叶变换。 我试图先创建一些单元测试,然后构建基本功能 问题是,我可以写一个测试来看看算法是否有效,我知道预期的结果。然后我开始构建大算法,如果它有效,我的单元测试将通过 我的问题是,这不是真正的TDD。因为通常您会创建测试类的一个非常基本的特性的测试。现在我的类基本上执行一个大的算法,我不能测试算法的较小部分,因为它们不是公共的(我一直被告知你永远不想测试私有方法) 您如何处理此问题?我认为有两种可能的方法: 如果可能-将算法实现移动到另一个类并将其拆分为方
我最近一直在讨论“什么是单位?”这确实是一个棘手的问题 如果您有理由相信FFT的子单元特别容易出错,那么就设置边界条件,打破私有方法可以豁免的规则
另一种说法是,子单元实际上是一个单元,其服务由FFT使用,因此您没有违反任何规则。我认为如果您无法测试算法的各个组件,要么代码是紧密耦合的,要么代码是非常程序化的
您可能必须将代码定义为单元,并将这些单元作为受保护的方法。只要该方法受到保护,它就会发出一条明确的消息,表明它不是API的一部分。如果您的类只有一个可测试的方法(按照您只测试公共方法的标准),那么您除了只测试该方法外别无选择,对吗?然而,这并不意味着它不是TDD,而且您当然可以测试各种各样的输入值。这里的大部分工作将是寻找有趣的值-您的转换可能失败的边缘情况是什么?是否存在任何无效输入以及如何处理
是否有某种方法可以对许多值进行算法验证,例如调用已知良好的例程,使用一些关键的傅立叶相关识别,或者可能使用FFT进行验证?无法获得程序风格和测试不可能性之间的联系。过程代码可以测试,也可以面向对象。@zerkms,我同意,但我是在上下文中说的。在程序代码中,有更多的可能性是一个非常紧密耦合的单元。(本案中的程序)。。我见过以链式方式编写的代码,执行单元测试非常困难。您可能已经读过了,但如果没有,我想建议您阅读:Michael Feathers,“有效地处理遗留代码”,这正是关于如何将不稳定的代码改为可测试的。我读了大约50%的书,变得更快乐;-)