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

| 我目前正在尝试创建一些类来进行傅立叶变换。 我正在尝试通过首先创建一些单元测试,然后构建基本功能来做到这一点。 问题是,很好,我可以编写一个测试来查看算法是否有效,并且知道预期的结果。然后,我开始构建大型算法,如果可以运行,我的单元测试将通过。 我的问题是,这不是真正的TDD。因为通常您创建测试来测试类的非常基本的功能。现在,我的班级基本上执行一种大型算法,并且由于它们不是公开的,因此我无法测试算法的较小部分(一直被告知您永远不想测试私有方法)。 您如何处理?     
已邀请:
我看到2种可能的方式: 如果可能的话-将算法实现移至另一个类并将其拆分为方法。之后的测试方法。 只需编写一堆测试,涵盖可能的正常情况,边缘情况和错误情况。     
我最近一直在与“什么是单位?”作斗争,这确实是一个棘手的问题。 如果您有理由认为FFT的子单元特别容易出错,请确定边界条件并打破免除私有方法的规则。 换句话说,子单元实际上是一个其服务由FFT使用的单元,那么您就不会违反任何规则。     
好吧,如果您的类只有一个可测试的方法(按照仅测试公共方法的标准),那么您别无选择,只能测试该方法,对吗?但是,这并不意味着它不是TDD-您当然可以测试各种输入值。这里的大部分工作将是找到有趣的值-转换可能会失败的哪些极端情况?是否有任何无效输入,该如何处理? 有什么方法可以对许多值进行算法验证,例如调用已知良好的例程,使用一些与傅立叶相关的关键标识,或者使用FFT进行乘法运算?     
我认为,如果您无法测试算法的各个组成部分,那么代码要么紧密耦合,要么代码具有程序性。 您可能必须将代码定义为单位,并使这些单位成为受保护的方法。只要该方法受到保护,它就会发送一条明确消息,表明它不属于API。     

要回复问题请先登录注册