gpt4 book ai didi

java - Effective Java Item 13 和 TDD

转载 作者:行者123 更新时间:2023-11-28 21:25:40 24 4
gpt4 key购买 nike

我刚刚在 google 上搜索了“Joshua Bloch TDD”……没有找到太多结果,这真是太可惜了,因为我真的很想知道他对这件事要说些什么。

第 13 项(我正在看第 2 版)的标题是“最小化类和成员的可访问性”。在几页之后他说:

To facilitate testing, you may be tempted to make a class, interface or member* more accessible. ... It is acceptable to make a private member of a public class package-private in order to test it, but it is not acceptable to raise the accessibility any higher than that... Luckily, it isn't necessary either, as tests can be made to run as part of the package being tested, thus gaining access to its package-private elements.

* 他所说的“成员”是指“字段、方法、嵌套类和嵌套接口(interface)”。

作为一个TDD新手,但逐渐站稳脚跟,我意识到目前的共识似乎是不将测试类包含在应用程序代码包中,甚至在src\test和src\main下也没有匹配的结构:大多数 TDD 专家似乎很容易以其他方式构建他们的测试目录(例如,您有一个名为“unittests”的目录,另一个名为“functionaltests”,另一个名为“e2etests”)。

具体来说,我在“Growing Object Oriented Software Guided by Tests”中关注了拍卖应用程序的 TDD 开发。那里的作者毫不犹豫地添加了数百个公共(public)方法。此外,在一章之后我查看了下载的“到目前为止的结构”,他已经完全改变了测试目录结构以将事物分为测试类别......

至少在过去,是否有任何经验丰富的 TDD 手发现这是困境的根源?如果是这样,你是如何解决的?

作为一个实际示例,我通过开发一个 Lucene 索引应用程序来学习 TDD 技术:它为文档编制索引,然后让您查询它们。目前,所有应用程序类都在同一个包中。实际上需要公开的唯一方法是一个类中的main。然而,当然,我有很多很多公共(public)方法:如果不是因为我正在使用 TDD,它们都可以是包私有(private)的。

PS 没有“method-visibility”标签所以我选择了“class-visibility”

稍后

似乎我可能被“成长的面向对象...”中采用的方法引向了一条相当不幸的道路,其中过度使用公共(public)方法可能只是因为它是该技术的演示.哈。

如果你想拆分你的测试类别,有没有人使用过这种方法:

\src\unit_tests\java\core\MainTest.java

还有,例如:
\src\func_tests\java\core\MainTest.java

\src\e2e_tests\java\core\MainTest.java?

最佳答案

as tests can be made to run as part of the package being tested

这并不意味着您必须将测试放在与主类相同的目录中,它们只需要放在相同的包中即可单独的目录。

假设您有一个包com.acme.foo。所以你的目录结构可能是:

src
main
java
com
acme
foo
MainClass
test
java
com
acme
foo
MainClassTest

MainClassTestMainClass 在同一个包中,因此它可以访问包私有(private)的东西。但这些是单独的目录,因此生成的 JAR 将不包含 MainClassTest

关于java - Effective Java Item 13 和 TDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41089617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com