将JUnit类分离成特殊的testing包?

我正在学习testing驱动开发的概念,通过阅读上一个问题“学习JUnit的示例项目和正确的软件工程”的答案中推荐的Craftsman文章 (点击主题下的Craftsman )。 我很喜欢它!

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

你如何组织你的JUnittesting类和你的实际代码? 我主要谈论的是包装的结构,但其他任何概念也是有帮助的。

你把org.myname.project.test。*中的testing类和org.myname.project。*中的正常代码放在一起吗? 你把testingclass和普通class放在一起吗? 你喜欢用Test来为类名加前缀而不是后缀?

我知道这似乎是我很快就不应该担心的事情,但我是一个非常以组织为中心的人。 我几乎是那种花费更多时间来研究方法来跟踪要完成什么的人,而不是实际完成任务。

而且我有一个目前整齐划分的软件包,但是这个项目变得一团糟。 我不是试图重构所有的东西,而是写testing,所以我想重新开始,首先testing。 但首先我需要知道我的testing去哪里。


编辑:我完全忘记了Maven,但似乎大部分人正在使用它! 在过去,我有一个具体的用例,Maven完全抛弃了我,但Ant给了我所需要的灵活性,所以我最终关注了Ant,但是我想也许我只是采取了错误的方法。 我想我会给Maven另一个尝试,因为它听起来像testing驱动开发将会顺利。

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

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 

这里的要点是我的testing类可以访问(和testing!)包范围类和成员。

正如上面的例子所示,我的testing类具有被testing类的名称加上Test作为后缀。 这有助于快速find它们 – 尝试在几百个testing类中进行search并不是很有趣,每个testing类的名称都以Test开始。

更新灵感来自@ Ricket的评论:这种方式testing类(通常)显示在他们的testing伙伴之后,在项目明智的按字母顺序列出的类名。 (有趣的是,我从这个日子里受益,没有自觉地意识到…)

Update2:很多开发者(包括我自己)都喜欢Maven,但似乎至less有这么多的开发者没有。 恕我直言,这是“主stream”的Java项目(我会把这个类别的项目约90%,但其他10%仍然是一个相当大的less数)是非常有用的。 如果可以接受Maven的约定,这很容易使用; 但是,如果不是这样,这会使人生一场悲惨的斗争。 Maven似乎很难理解许多在Ant上社交化的人,因为它显然需要一种截然不同的思维方式。 (我自己从未使用Ant,无法比较两者)。有一点是肯定的:它使得单元(和集成)testing成为stream程中一个自然的,一stream的步骤,这有助于开发人员采用这种基本的实践。

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

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

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

也就是说,一个带有Test的testing类被添加到被testing的类的名字中,并且在主testing的并行目录结构中。

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