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

2022-08-31 08:39:43

我正在通过阅读Craftsman文章(单击“按主题”下的Craftsman)来学习测试驱动开发的概念,这些文章是在回答我上一个问题“学习JUnit和适当的软件工程的示例项目”中推荐的。到目前为止,我喜欢它!

但现在我想坐下来自己尝试一下。我有一个问题,我希望只需要一个简单的答案。

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

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

我知道这似乎是我不应该这么快担心的事情,但我是一个非常以组织为中心的人。我几乎是那种花更多时间找出方法来跟踪要完成的工作的人,而不是真正完成任务的人。

我有一个项目,目前被整齐地分成了几个包,但这个项目变得一团糟。我不想尝试重构所有内容并编写测试,而是希望从头开始,首先进行测试。但首先,我需要知道我的测试去向。


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


答案 1

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

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

其中的要点是,我的测试类可以访问(并测试!)包范围的类和成员。

如上面的示例所示,我的测试类具有测试类的名称以及作为后缀。这有助于快速找到它们 - 尝试在几百个测试类中搜索并不是很有趣,每个测试类的名称都以...TestTest

更新的灵感来自@Ricket的评论:通过这种方式,测试类(通常)在按项目顺序排列的类名字母列表中显示在测试伙伴之后。(有趣的是,我每天都在从中受益,而没有有意识地意识到如何......)

更新2:很多开发人员(包括我自己)喜欢Maven,但似乎至少有同样多的人不喜欢。恕我直言,这对于“主流”Java项目非常有用(我会将大约90%的项目归入此类别......但另外10%仍然是相当大的少数)。如果可以接受Maven约定,它就很容易使用;然而,如果不是这样,它会使生活变得悲惨。对于许多在蚂蚁上社交的人来说,Maven似乎很难理解,因为它显然需要一种非常不同的思维方式。(我自己从未使用过蚂蚁,无法将两者相提并论。有一件事是肯定的:它使单元(和集成)测试成为流程中自然的一流步骤,这有助于开发人员采用这一基本实践。


答案 2

我将测试类放在与它们正在测试的包相同的包中,但放在不同的源文件夹或项目中。以这种方式组织测试代码使我能够轻松地单独编译和打包它,以便生产jar文件不包含测试代码。它还允许测试代码访问包私有字段和方法。


推荐