在项目中,测试类应该存放在哪里?

3

我在工作中使用RAD/Eclipse构建所有的Web项目,并且很想知道您通常将测试*.class文件存储在何处。

我所有的Web项目都有两个源文件夹:“src”用于源代码,“test”用于测试用例。目前,这两个源文件夹生成的*.class文件都放置在WebContent/WEB-INF/classes文件夹下。

我想将测试*.class文件与源*.class文件分开,原因如下:

  • 没有必要将它们存储在WebContent/WEB-INF/classes中并在生产环境中部署它们。
  • Sonar和其他静态代码分析工具不能产生准确的静态代码分析,因为它考虑了我那些糟糕但正确的测试用例代码。

因此,现在我有以下输出文件夹:

  • “src”源文件夹编译到WebContent/WEB-INF/classes文件夹中。
  • “test”源文件夹编译到target/test-classes文件夹中。

现在,我从RAD得到了以下警告:

Broken single-root rule: A project may not contain more than one output folder.

所以,似乎基于Eclipse的IDE更喜欢一个项目=一个输出文件夹,但它提供了一个选项,让我可以从“构建路径”对话框中设置自定义输出文件夹来处理我的附加源文件夹,然后它就会警告我。
我知道我可以自己禁用此警告,但我想知道你是如何处理这个问题的。
更新:
我附上了一个我项目的构建路径对话框的截图。我正在使用RAD v7.5.5。似乎大多数人都使用Maven构建他们的项目。我很喜欢使用Maven,在工作之外的地方都使用Maven,因为它与Websphere不兼容。如果您知道如何使Maven化的项目与Webpshere一起工作,请告诉我。

请参见http://junit.sourceforge.net/doc/faq/faq.htm#organize_1。 - trashgod
可能是JUnit测试在项目中的组织的重复问题。 - mmmmmm
3个回答

3

我选择创建一个独立的测试项目,与源码项目并存。

这样你就可以为测试项目添加额外的依赖项,例如仅用于测试而不需要在常规项目中添加的第三方库。


Maven(或Ivy)可以为您处理此问题。您可以将依赖项作用域设置为Test。 - Jeff Storey
我希望我能在我的工作项目中使用Maven,但事实是,它与Websphere的兼容性非常差,或者至少,我无法让Maven与之配合得很好。我的当前项目结构就像一个改良版的Maven项目,看起来像Maven项目,但实际上并不是。我有一个ANT脚本,可以调用"mvn war:exploded",然后以编程方式将所有jar复制到我的动态Web项目的WebContent/WEB-INF/lib中。现在,我只是感到沮丧,因为RAD将多个输出文件夹视为潜在问题。 - limc

2

假设被测试的类是com.example.MyClass。我会把测试MyClassTest放在同一个包com.example中,但是放在一个单独的文件夹test中:

        module
        /     \
      src   -> target <-
      /  \
   main   test
     |      |
    java   java
     |       |
     com    com
     |        |
    example  example
     |        | 
MyClass.java MyClassTest.java

这是Maven标准目录结构
但是您可以将测试和主类的类文件编译到同一个输出文件夹target中。

0

这有点尴尬,但我在上面的帖子中附加截图时遇到了问题。无论如何,我认为这可能是RAD的问题。我在Eclipse Galileo中尝试了同样的事情,是的,我没有收到任何警告。顺便说一下,我正在使用RAD v7.5.5。 - limc
@limc:听起来确实是一个RAD的“问题”。奇怪的是,我知道你可以在Maven项目中使用RAD(这就是我在Eclipse中所做的)。但也许当人们这样做时会收到这个警告,我无法确认。 - Pascal Thivent
好的,我终于在我的帖子中上传了屏幕截图。RAD与Maven一起使用很好,只要它不是Web项目。我无法从Maven项目中使热部署针对Websphere工作,此外我目前通过手动创建IBM xmi文件来使我的JNDIs在Websphere中工作。当然,“黑客”整个事情非常脆弱,所以我不知道当我将来转移到WAS 7时整个事情是否能够正常工作。我的目标是使用Maven设置我的项目,并针对Jetty进行开发,然后将其打包并部署到Websphere中...并祈祷。 - limc
@limc 我之前不知道 RAD 存在这个“限制”(我猜这是一个软性限制,否则就会完全禁止它,但我不知道后果)。顺便说一下,我截图中的示例项目是一个 Web 应用程序项目。关于另一部分(在 Tomcat/Jetty/GlassFish 上进行开发),这是非常普遍的,特别是在使用缓慢容器时。如果您没有使用特定的东西(即如果您使用标准的 Java EE 东西),那应该没问题。只需定期在目标容器上部署以避免任何不良惊喜。 - Pascal Thivent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接