将 JUnit 类分离成特殊的测试包?

我正在通过阅读 Craftsman articles(单击 By Topic下的 工匠)来学习测试驱动开发的概念,这是对我之前的问题 学习 JUnit 和正确软件工程的示例项目的回答。到目前为止我都很喜欢!

But now I want to sit down and try it myself. I have a question that I hope will need only a simple answer.

如何组织 JUnit 测试类和实际代码?我主要讨论的是包结构,但是任何其他值得注意的概念也会有所帮助。

您是否将测试类放在 org.myname.project.test 中。* 以及 org.myname.project 中的普通代码。*?你是否将测试类与普通类放在一起?您是否更喜欢在类名前面加上 Test 而不是后缀?

我知道这似乎是那种我不应该这么快担心的事情,但我是一个非常以组织为中心的人。我是那种会花更多时间去想办法来记录要做什么事情的人,而不是真正把事情做完的人。

我有一个项目,目前是整齐划分成包,但该项目成为一个烂摊子。我不想尝试重构所有内容并编写测试,而是想重新开始,首先是测试。但首先我要知道我的测试结果。


编辑: 我完全忘记了 Maven,但是看起来你们大多数人都在使用它!在过去,我有一个特定的用例,Maven 在我身上完全崩溃了,但是 Ant 给了我所需要的灵活性,所以我最终依赖于 Ant,但是我想也许我只是采用了错误的方法。我想我会再给玛文一次机会,因为听起来它和测试驱动开发很配。

68389 次浏览

我使用 玛文。 Maven 提倡的结构是:-

src/main/java/org/myname/project/MyClass.java


src/test/java/org/myname/project/TestMyClass.java

例如,一个测试类的名称前面加上了 Test,这个测试类位于主测试的并行目录结构中。

将测试类放在同一个包(不一定是目录)中的一个好处是,您可以利用包作用域方法来检查或注入模拟测试对象。

我更喜欢将测试类放在与它们测试的项目类相同的包中,但是放在不同的物理目录中,比如:

myproject/src/com/foo/Bar.java
myproject/test/com/foo/BarTest.java

在 Maven 项目中,它看起来是这样的:

myproject/src/main/java/com/foo/Bar.java
myproject/src/test/java/com/foo/BarTest.java

这里的主要观点是我的测试类可以访问(和测试!)包作用域类和成员。

如上面的示例所示,我的测试类的名称加上 Test作为后缀。这有助于快速找到它们——尝试在几百个测试类中进行搜索并不十分有趣,每个类的名字都以 Test开头..。

受@Ricket 的评论启发而更新 : 这样,测试类(通常)就会在它们的测试伙伴之后,按项目方向的类名字母顺序显示出来。(有趣的是,我每天都在从中受益,却没有意识到... ...)

Update2: A lot of developers (including myself) like Maven, but there seems to be at least as many who don't. IMHO it is very useful for "mainstream" Java projects (I would put about 90% of projects into this category... but the other 10% is still a sizeable minority). It is easy to use if one can accept the Maven conventions; however if not, it makes life a miserable struggle. Maven seems to be difficult to comprehend for many people socialized on Ant, as it apparently requires a very different way of thinking. (Myself, having never used Ant, can't compare the two.) One thing is for sure: it makes unit (and integration) testing a natural, first-class step in the process, which helps developers adopt this essential practice.

我将我的测试类放在与它们测试的 but in a different source folder or project相同的包中。以这种方式组织我的测试代码使我能够轻松地单独编译和打包它,以便生产 jar 文件不包含测试代码。它还允许测试代码访问包私有字段和方法。