单元测试 – TDD:您对哪些方法进行单元测试?

TDD的一个方面,我从来没有完全理解.

假设有人要求你实现一个简单的Stack对象.如果您正确地完成了设计,您将会看到一个非常小巧干净的API.假设:push(),pop()和isEmpty().任何事情都超过了这个要求,并且允许用户太多的空间弄乱你的代码.

所以现在让我们假设你想对你的代码进行单元测试.如果所有的公共方法只是上面显示的三个方法,你该怎么做?这些方法将仅在您的测试中进行.

因此,您可以添加私有方法,因为您的单元测试用例不可见,这些方法根本无法帮助您.或者您将这些方法公开,并且您的努力工作的简约API.现在用户将会混乱你的Stack,而且bug一定会来的.

您如何处理开放公开测试方法与简洁API的困境?

编辑:只是指向正确的方向,很高兴得到技术指标(如“使用这个黑客暴露私人方法”等),但我更多地关注更多的通用答案关于什么这两个概念更重要,你如何处理这个问题.

>测试功能;这通常意味着测试公共接口 – 不应该通过公共接口访问所有功能?如果他们不是,那么他们不是功能!可能有例外,但我不能想到任何. >测试公共接口;没有必要直接或间接从公共接口调用的任何方法.它们不仅不需要被测试,它们根本不需要存在.

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...