我正在通过阅读上一个问题的答案中推荐的Craftsman articles(点击按主题下的 Craftsman )来学习测试驱动开发的概念,"Sample project for learning JUnit and proper software engineering"。到目前为止,我喜欢它!
但现在我想坐下来亲自尝试一下。我有一个问题,我希望只需要一个简单的答案。
您如何组织JUnit测试类和实际代码?我主要讨论的是包结构,但任何其他注意事项也会有所帮助。
您是否将测试类放在org.myname.project.test。*和org.myname.project中的普通代码中。*?您是否将测试类与正常类一起放在一起?您更喜欢使用Test而不是后缀来为类名添加前缀吗?
我知道这似乎是我不应该这么快就担心的事情,但我是一个非常以组织为中心的人。我几乎那种花费更多时间来找出方法来跟踪要做什么的人,而不是实际完成任务。
我有一个项目,目前整齐划分为包,但项目变得一团糟。我没有尝试重构所有内容并编写测试,而是首先尝试新的测试。但首先我需要知道测试的去向。
编辑:我完全忘记了Maven,但似乎大多数人都在使用它!在过去,我有一个特定的用例,Maven完全打破了我,但Ant给了我所需的灵活性,所以我最终依附于Ant,但我想也许我只是采取了错误的方法。我想我会再给Maven一个尝试,因为听起来它会很好地适应测试驱动的开发。
答案 0 :(得分:147)
我更喜欢将测试类放在与他们测试的项目类相同的包中,但是在不同的物理目录中,例如:
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
开头......
更新:这种方式测试类(通常)会在项目名称的项目字母列表中显示在测试好友之后。 (有趣的是,我从一天中受益,没有有意识地意识到......)
Update2:许多开发人员(包括我自己)都喜欢Maven,但似乎至少有很多人没有。恕我直言,它对“主流”Java项目非常有用(我会将约90%的项目纳入此类别......但其他10%仍然是相当大的少数项目)。如果可以接受Maven惯例,它很容易使用;但如果没有,它会让生活变得悲惨。对于许多在Ant上社交的人来说,Maven似乎很难理解,因为它显然需要一种非常不同的思维方式。 (我自己,从未使用过Ant,无法比较两者。)有一件事是肯定的:它使单元(和集成)测试成为流程中自然的,一流的步骤,这有助于开发人员采用这种基本实践。 / p>
答案 1 :(得分:15)
我将测试类放在与测试相同的包中,但是放在不同的源文件夹或项目中。以这种方式组织我的测试代码允许我轻松地单独编译和打包它,以便生产jar文件不包含测试代码。它还允许测试代码访问包私有字段和方法。
答案 2 :(得分:12)
我使用Maven。 Maven推广的结构是: -
src/main/java/org/myname/project/MyClass.java
src/test/java/org/myname/project/TestMyClass.java
即。一个测试类,其测试前置于被测试类的名称,与主测试的并行目录结构。
将测试类放在同一个包中(不一定是目录)的一个好处是可以利用包范围方法来检查或注入模拟测试对象。</ p>