【问题标题】:Where should test classes be stored in the project?测试类应该存储在项目中的什么位置?
【发布时间】:2010-05-25 15:22:47
【问题描述】:

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

我所有的 Web 项目都有 2 个源文件夹:“src”用于源,“test”用于测试用例。为两个源文件夹生成的 *.class 文件当前位于 WebContent/WEB-INF/classes 文件夹下。

我想将测试 *.class 文件与 src *.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 配合使用。如果你知道如何让一个 Mavenized 项目与 Webpshere 一起工作,也请告诉我。

alt text http://www.imagebanana.com/img/89q9o46t/s1.jpg

【问题讨论】:

标签: java eclipse unit-testing project-structure


【解决方案1】:

我已选择单独的 TEST 项目与 SOURCE 项目共存。

这样您可以为您的测试项目添加额外的依赖项,例如一些您只需要用于测试的第三方库,而不是在您的常规项目中添加此依赖项。

【讨论】:

  • Maven(或 Ivy)可以为您处理这个问题。您可以将依赖项限定为测试。
  • 我希望我可以在我的工作项目中使用 Maven,但事实是它与 Websphere 一起使用并不好,或者至少,我无法让 Maven 很好地使用它.我当前的项目结构就像一个混蛋版本的 Maven 项目,它看起来像一个 Maven 项目,但事实并非如此。我有一个调用“mvn war:exploded”的 ANT 脚本,然后以编程方式将所有 jar 复制到我的动态 Web 项目中的 WebContent/WEB-INF/lib 中。现在,我对 RAD 将多个输出文件夹视为潜在问题感到沮丧。
【解决方案2】:

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

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

这是Maven's Standard Directory Layout

但是你可以将测试和主类的类文件编译到同一个输出文件夹target

【讨论】:

    【解决方案3】:

    我不知道 RAD,但我可以告诉你,我的所有项目都使用单独的输出文件夹进行测试和测试资源,在 Eclipse 下没有任何问题:

    alt text http://www.imagebanana.com/img/9c8m79s/screenshot_008.png

    【讨论】:

    • 这很尴尬,但我在上面的帖子中附上我的截图时遇到了问题。无论如何,我认为这可能是 RAD 的问题。我在 Eclipse Galileo 中尝试过同样的事情,是的,我没有收到任何警告。顺便说一句,我使用的是 RAD v7.5.5。
    • @limc:听起来确实是一个 RAD“问题”。奇怪的是,我知道您可以将 RAD 与 Maven 项目一起使用(这就是我对 Eclipse 所做的)。但也许人们在这样做时会收到此警告,我无法确认。
    • 好的,我终于在我的帖子中找到了截图。 RAD 可以与 Maven 一起正常工作,前提是它不是 Web 项目。我无法通过 Maven 项目进行热部署以针对 Websphere 工作,而且我目前手动创建 IBM xmi 文件以使我的 JNDI 在 Websphere 中工作。当然,整个“黑客”事情是如此脆弱,所以当我将来迁移到 WAS 7 时,要知道这整件事会由谁来发挥作用。我的目标是使用 Maven 设置我的项目,并针对 Jetty 进行开发,然后我会倾听它并将其部署在 Websphere 中......并祈祷。
    • @limc 我不知道 RAD 的这种“限制”(我猜这是一个软限制,或者它会完全禁止它,但我不知道后果)。顺便说一句,我截图上的示例项目是一个 webapp 项目。关于另一部分(在 Tomcat/Jetty/GlassFish 上进行开发),这很常见,尤其是在使用慢速容器时。如果您没有使用特定的东西(即,如果您使用的是标准的 Java EE 东西),那应该没问题。只需定期在目标容器上部署以避免任何意外。
    猜你喜欢
    • 2014-05-17
    • 2010-12-18
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多