我刚刚在 Google 上搜索了“Joshua Bloch TDD”... 没有找到太多信息,这真是太遗憾了,因为我真的很想知道他在这件事上要说什么。
第 13 项(我正在看第 2 版)标题为“最小化类和成员的可访问性”。几页后,他说:
为了便于测试,您可能想使类、接口或成员*更易于访问。... 将公共类包的私有成员设为私有以对其进行测试是可以接受的,但是将可访问性提高到更高的水平是不可接受的...幸运的是,这也不是必需的,因为测试可以作为被测试包的一部分运行,从而获得对其包私有元素的访问。
* “成员”是指“字段、方法、嵌套类和嵌套接口”。
作为一个 TDD 新手,但逐渐站稳脚跟,我知道目前的共识似乎是不包括测试类与应用程序代码包,甚至在 src\test 和 src\main 下也没有匹配结构:主要是 TDD专家似乎很容易以其他方式构建他们的测试目录(例如,您有一个名为“unittests”的目录,另一个名为“functionaltests”,另一个名为“e2etests”)。
具体来说,我在“Growing Object Oriented Software by Tests”中关注了拍卖应用的TDD开发。作者毫不犹豫地添加了数百个公共方法。此外,我看了一章后下载的“到目前为止的结构”,他已经完全改变了测试目录结构,将事物划分为测试类别......
是否有任何经验丰富的 TDD 手至少在过去发现这是两难的根源?如果是这样,您是如何解决的?
作为一个实际的例子,我正在通过开发一个 Lucene 索引应用程序来学习 TDD 技术:它索引文档,然后让您查询它们。目前所有的应用程序类都在同一个包中。实际上需要公开的唯一方法是main
在一个类中。然而,当然,我有很多很多公共方法:如果不是因为我使用的是 TDD,它们都可以是包私有的。
PS“方法可见性”没有标签,所以我选择了“类可见性”
之后
看来,我可能被“成长中的面向对象...”中采用的方法引向了一条相当不幸的道路,其中过度使用公共方法可能只是因为它是该技术的演示。哈。
如果您想拆分测试类别,是否有人使用过这种方法:
\src\unit_tests\java\core\MainTest.java
而且,例如:
\src\func_tests\java\core\MainTest.java
和
\src\e2e_tests\java\core\MainTest.java
?