【问题标题】:Test classes visibility测试类可见性
【发布时间】:2012-01-09 10:56:06
【问题描述】:

我有一个项目 A,其中包含数据模型代码 (Hibernate) 和一些单元测试。我还有其他项目 B、C 和 D 以及他们的代码和单元测试。我还有一组测试实用程序类,供所有项目的单元测试使用。这些测试实用程序类依赖于项目 A,因为它们使用数据模型类。

如果我将这些测试实用程序类放在项目 A 中,我会遇到以下问题:项目 B、C 和 D 如何在 IDE 之外查看这些测试实用程序类(我准确地说这些测试实用程序类放在 src /test/java 目录然后不包含在 JAR 中)?

如果我将这些测试实用程序类放在一个单独的项目中,我会得到循环依赖,因为测试实用程序类依赖于项目 A,而 A 的单元测试使用这些测试实用程序类。

感谢您的帮助

【问题讨论】:

    标签: java unit-testing maven


    【解决方案1】:

    这些测试实用程序类应该(由您的构建过程)打包在一个单独的 JAR 文件中,其他项目仅在运行测试时使用该文件。

    【讨论】:

    • 请看我对 Manish Sharma 的评论。
    • @Mickael Marrache:我们并不是说您应该将测试实用程序放在一个单独的项目中,我们是说您应该有一个项目 A,其中构建了两个 JAR,一个包含测试实用程序一个包含生产代码。
    • 好点,但似乎 Maven 不推荐它:见 maven.apache.org/guides/mini/… ,所以我认为有一个更清洁的解决方案。
    • @Mickael Marrache:如果“项目”是指“Maven POM”,那么“干净”的解决方案是拥有 三个 项目,其中一个 (A1) 用于生产类,一个 (A2) 具有依赖于 A1 的测试实用程序,一个 (A3) 具有依赖于 A1 和 A2 的测试
    • 我理解,但是将生产类和单元测试放在两个独立的项目上似乎很奇怪,这是我从未见过的场景。通常,单元测试放在生产类所在的同一项目的 src/test/java 目录中。为什么我会遇到这种“特殊”情况?也许单元测试或测试实用程序类的设计不好?
    【解决方案2】:

    您可以将每个项目捆绑在其自己的 jar 中 - A.jar、B.jar、C.jar、D.jar 并将实用程序类放在它们自己的 jar 中 - testutilities.jar

    然后,您可以通过包含 testutilities.jar 轻松地将 testutilities 包含在其他项目中。您还需要包含 A.jar,因为 testutilities.jar 取决于 A.jar。

    【讨论】:

    • 问题是Test Utilities类依赖于项目A,而A的单元测试使用这些工具类。因此,如果我将 Test Utilities 类放在一个单独的项目中,我会得到一个循环依赖。
    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多