【发布时间】:2012-06-14 15:27:38
【问题描述】:
我知道(并同意)将单元测试放在单独的程序集中的常见论点。但是,最近我遇到了一些我真的想测试私有方法的情况。所讨论的幕后逻辑非常复杂,以至于测试公共和内部接口并不能完全完成工作。对类的公共接口的测试感觉过度劳累,我看到一些针对私有接口的测试可以更简单有效地完成工作。
过去,我通过制作我需要测试的东西protected,并创建一个我可以在测试框架中使用它的子类来解决这些情况。但这在应该是sealed 的类上效果不佳。更不用说用所有的脚手架来膨胀测试框架了。
所以我正在考虑这样做:在班级中放置一些测试,在那里他们可以得到私人成员。但是使用“#if DEBUG”将它们排除在生产代码之外。
这看起来是个好主意吗?
【问题讨论】:
-
如果内部逻辑这么复杂,可能私有方法需要重构为单独的类。
-
延伸阅读:How do you unit test private methods? 忽略标记的答案。
-
@Joe 我同意这是一个非常重要的设计原则。但每一个“也许”都有它的“也许不是”。这是“不”的情况之一。
-
@SeanU 如果这只是一次性的,那么反射是一个足够好“较小的邪恶”。
-
@Sean,好的,但是您问的是一个一般性问题,一般性的答案是寻求更可测试的设计。也许通过重构私有的东西,也许通过解封和使用受保护的东西。但是你的提议当然会奏效,任何规模的所有项目最终都会在某个地方出现丑陋的黑客行为,所以我不会担心......
标签: c# .net unit-testing