我在TDD的环境中工作,基本上我是一个两难,我认为是在TDD环境非常重要面向。 作为一个程序员,你希望你的方法,以尽可能可读。 为了实现这个目标,我们倾向于分割我们在多个私有方法的方法为好。 虽然这样做,这是转移到私有函数所有的代码失去它的测试能力。
犀牛测试类不能看到所有的私有方法,我需要能够运行针对这些方法测试以及。 我不想让他们成为公众,因为它没有任何意义,让他们公开。
有任何想法吗?
我在TDD的环境中工作,基本上我是一个两难,我认为是在TDD环境非常重要面向。 作为一个程序员,你希望你的方法,以尽可能可读。 为了实现这个目标,我们倾向于分割我们在多个私有方法的方法为好。 虽然这样做,这是转移到私有函数所有的代码失去它的测试能力。
犀牛测试类不能看到所有的私有方法,我需要能够运行针对这些方法测试以及。 我不想让他们成为公众,因为它没有任何意义,让他们公开。
有任何想法吗?
如果我qoute你的问题的一部分:
[...]我们倾向于分割我们在多个私有方法的方法[...]
这是错误的。 如果按照单一职责原则和良好的面向对象设计,你的方法会更独立,更简单。 如果你觉得你要解开一个又一个私有方法,使您的公众一个看起来更短,先给它一个想法。 也许,你可以在一个单独的类重构它?
你不测试私有方法,因为你测试公共合同和实现的不是细节。 如果你想有远亲类似于私有方法测试的东西,让他们内部并设置InternalsVisibleTo
属性。
另一种方法(由R.哈维指出)是写一个包装你的私有方法成公共的一个包装类。 这种方法有,你不需要让你的私有方法的内部受益。 其缺点是,对于每一个私有方法,你将有一个包装公共方法。 所以方法的量可能增加一倍。
正如其他人的建议,一个方法来测试非公共方法就是让他们内部并使用InternalsVisibleTo
属性。 然而,我强烈建议针对。
私有方法应该通过单元测试通过测试使用这些公共的方法覆盖。 当然,随着时间的推移,你的类测试添加更多的功能,它变得越来越复杂设置你的测试。 这是一个类有太多责任的良好指标,你应该把它分割成多个更小的类别。 然后,可以使这些更小的类原始类的依赖 ,并嘲笑他们在你的测试-将再次简化测试。
虽然这样做,你不必完全放弃私有方法 - 这是利用它们来使你的代码,而无需使用注释更具可读性是个好主意。