Eclipse在同一个项目中的junittesting

这是一个相对开放的问题。 如果我在Eclipse的一个项目中构build了一个应用程序,然后我想testing这个项目,我应该在同一个项目中创buildJUnit代码还是创build一个单独的项目。 例如…

ShopSystem也许是我的主要项目的名称 – 我应该创build一个叫做ShopSystemTest的项目吗?

一般来说 – testing代码应该从主项目文件夹存储多远? 如果我将testing代码存储在主项目中,然后将主项目导出为可运行的jar,那么它将使用testing代码,这不是理想的…

build议?

虽然不是唯一正确的方法,但通常的做法是在同一个项目中保持unit testing。

您可以创build第二个源文件夹(如test ),将testing类放到与被testing类相同的包中。 这也允许你testing包私有类,而不是泛滥你的主源代码包与testing类。

您的源文件夹/包结构将如下所示:

 -sources -main -my.package -MyClass.java -test -my.package -MyClassTest.java 

然后,您可以configuration您的版本在打包JAR时不包括test源文件夹。

我非常喜欢maven规范:在同一个项目中,main和test有一个单独的源代码树,主代码被部署,testing代码没有。 包结构可以是(但不一定是)相同的。

 project src main java // source files resources // xml, properties etc test java // source files resources // xml, properties etc 

在eclipse中,当你selectnew -> JUnit test case ,只需将源文件夹更改为src / test / java,并按原样保留build议的包。

(保留在同一个包中的好处之一是可以访问受保护的和包范围的成员,虽然这不是“正确的”unit testing行为)


更新:下面是一些代码来说明我的最后一点:

主类(在src / main / java中):

 package com.test; public class Foo{ static class Phleem{ public Phleem(final String stupidParameter){ } } String bar; protected String baz; protected Object thingy; } 

testing类(在src / test / java中):

 package com.test; import org.junit.Test; public class FooTest{ @Test public void testFoo(){ final Foo foo = new Foo(); foo.bar = "I can access default-scoped members"; foo.baz = "And protected members, too"; foo.thingy = new Foo.Phleem("And I can access default-scoped classes"); } } 

通常你有 –

 /src/main/java (for codes) /src/test/java (for tests) 

考虑一下maven的方式:在maven项目中,soruces是这样组织的

 src |--main | |--java |--test |--java 

你的源代码在src / main / java中,你的junittesting代码在src / test / java中,它们都是源文件夹(因此你可以把你的jUnit代码放在与你的Java代码相同的包中,一个不同的源文件夹)。

兴趣是对于通常的编码,你的jUnit类在代码包中,但在创buildjar时,你可以只从src / main / java获得类,而不是释放你的testing。