TDD 有一个方面我从未完全理解。
假设有人要求您实现一个简单的 Stack 对象。如果您正确地完成了设计,您将获得一个非常简洁的 API。假设:push()
、pop()
和 isEmpty()
。超出此范围的任何事情都会过度扼杀需求,并允许用户有太多空间来扰乱您的代码。
现在假设您要对代码进行单元测试。如果您所有的公共(public)方法都只是上面显示的三个,您将如何做呢?这些方法只会对您进行到目前为止的测试。
因此,要么您添加私有(private)方法,但这些方法对您没有任何帮助,因为它们对您的单元测试用例不可见。或者你将这些方法公开,然后你努力工作的简约 API 就出现了。现在用户会弄乱你的 Stack,错误肯定会出现。
您如何处理开放公共(public)方法进行测试与干净简单的 API 之间的两难选择?
编辑:只是为了指出正确的方向,如果能得到技术指导(比如“使用这个 hack 来公开私有(private)方法”等)会很好,但我很更感兴趣的是关于这两个概念中哪个更重要以及您如何处理这个主题的更通用的答案。
最佳答案
测试功能;这通常意味着测试公共(public)接口(interface)——因为不应该通过公共(public)接口(interface)访问所有功能吗?如果不是,那么它们就不是特征!这可能有异常(exception),但我想不出任何异常(exception)。
测试公共(public)接口(interface);任何未直接或间接从公共(public)接口(interface)调用的方法都是不必要的。它们不仅不需要测试,而且根本不需要存在。
关于unit-testing - TDD:您为单元测试公开了哪些方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/386493/