有关TDD的一个方面我从未完全理解。
假设有人要求你实现一个简单的堆栈对象。如果你已经正确设计,你会得到一个非常简洁和干净的 API。例如: push()
,pop()
和 isEmpty()
。任何超出这些范围的东西都是过度实现需求,让用户有太多余地来操作你的代码。
那么现在假设你想对你的代码进行单元测试。如果你所有的公共方法只是上面展示的三个方法,你该如何去做呢?这些方法只能帮助你进行有限的测试。
因此,你可以添加私有方法,但由于它们对你的单元测试用例不可见,所以并没有任何帮助。或者你将这些方法变成公共方法,那么你费尽心思设计的简约API也就毁了。现在用户将会操纵你的堆栈,错误也随之而来。
你如何处理这种打开公共方法以进行测试与拥有简洁而简单的API之间的困境?
编辑: 为了指明正确的方向,获取技术指针(如“使用此技巧公开私有方法”等等)会很不错,但我更感兴趣的是更通用的答案,例如哪个概念更重要以及你如何处理这个问题。