Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 应用于私有方法的单元测试_Algorithm_Unit Testing_Testing_Private Methods - Fatal编程技术网

Algorithm 应用于私有方法的单元测试

Algorithm 应用于私有方法的单元测试,algorithm,unit-testing,testing,private-methods,Algorithm,Unit Testing,Testing,Private Methods,我目前正在尝试创建一些类来进行一些傅立叶变换。 我试图先创建一些单元测试,然后构建基本功能 问题是,我可以写一个测试来看看算法是否有效,我知道预期的结果。然后我开始构建大算法,如果它有效,我的单元测试将通过 我的问题是,这不是真正的TDD。因为通常您会创建测试类的一个非常基本的特性的测试。现在我的类基本上执行一个大的算法,我不能测试算法的较小部分,因为它们不是公共的(我一直被告知你永远不想测试私有方法) 您如何处理此问题?我认为有两种可能的方法: 如果可能-将算法实现移动到另一个类并将其拆分为方

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

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

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

您如何处理此问题?

我认为有两种可能的方法:

  • 如果可能-将算法实现移动到另一个类并将其拆分为方法。试验后的试验方法
  • 只需编写一系列测试,涵盖可能的正常情况、边缘情况和错误情况

  • 我最近一直在讨论“什么是单位?”这确实是一个棘手的问题

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


    另一种说法是,子单元实际上是一个单元,其服务由FFT使用,因此您没有违反任何规则。

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


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

    如果您的类只有一个可测试的方法(按照您只测试公共方法的标准),那么您除了只测试该方法外别无选择,对吗?然而,这并不意味着它不是TDD,而且您当然可以测试各种各样的输入值。这里的大部分工作将是寻找有趣的值-您的转换可能失败的边缘情况是什么?是否存在任何无效输入以及如何处理


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

    无法获得程序风格和测试不可能性之间的联系。过程代码可以测试,也可以面向对象。@zerkms,我同意,但我是在上下文中说的。在程序代码中,有更多的可能性是一个非常紧密耦合的单元。(本案中的程序)。。我见过以链式方式编写的代码,执行单元测试非常困难。您可能已经读过了,但如果没有,我想建议您阅读:Michael Feathers,“有效地处理遗留代码”,这正是关于如何将不稳定的代码改为可测试的。我读了大约50%的书,变得更快乐;-)