10

我有一些 JUnit 测试包含在.jar旨在用作库的 a 中。该库包含一些在另一个项目中使用该库时应运行的测试。

但是,当我使用该库创建一个新项目并在 Eclipse 中在其上运行 JUnit 时,依赖项中的测试.jar不会运行/不会被 JUnit 测试运行器检测到。我收到消息:

No tests found with test runner 'JUnit 4'.

有没有办法可以配置依赖项.jar,以便测试与主项目中可能包含的任何测试一起运行?

基本上我希望依赖 .jar 将测试“导出”到它使用的任何项目。

我正在使用 Eclipse Juno、JUnit 4.10 和 Maven 进行依赖管理。

编辑:

这个库的重点是能够帮助测试使用它的项目——即它运行一些专门的测试。这就是为什么我希望能够导入库 .jar 并让它为导入项目贡献额外的测试。

4

5 回答 5

5

你可以试试Maven Surefire

在某些情况下,拥有一组使用各种依赖配置运行的测试会很有用。实现此目的的一种方法是拥有一个包含单元测试并生成测试 jar 的项目。然后,几个测试配置项目可以使用单元测试并使用不同的依赖集运行它们。问题是没有简单的方法可以在依赖项 jar 中运行测试。Surefire插件应该具有允许我运行包含在依赖项 jar 中的所有或一组单元测试的配置。

这可以按如下方式完成(Junit 3):

确保测试 jar 包含一个具有静态套件()方法的类

import junit.framework.Test;
import junit.framework.TestSuite;

public class AllTests {    
    public static Test suite() 
    { 
        TestSuite suite = new TestSuite( "All Tests"); 
        suite.addTestSuite(TestOne.class); 
        suite.addTestSuite(TestTwo.class); 
        return suite; 
    }    
}

然后在项目中使用 test-jar 依赖:创建一个TestCase

package org.melati.example.contacts;
import org.melati.poem.AllExportedTests;
import junit.framework.Test;
import junit.framework.TestCase;

public class PoemTest extends TestCase {    
    public static Test suite() 
    { 
        return AllExportedTests.suite(); 
    }
}

现在将找到测试。

于 2012-09-06T10:21:37.440 回答
2

我认为制作单元测试库(带@Test注释的方法)是一个坏主意。但是,制作一个可重用的测试组件库是一个不错的选择。我们已经在一些开源项目中做到了这一点,您可以看看它是如何工作的。

  1. src/mock/java一个 Maven 模块从目录中导出测试组件(我们称它们为“模拟”) 。导出的工件具有-mock分类器。请参阅rexsl/pom.xml(注意突出显示的行)。

  2. 模拟工件与常用工件一起部署到 Maven 中心:http ://repo1.maven.org/maven2/com/rexsl/rexsl-core/0.3.8/ (注意...-mock.jar文件)

  3. 需要 mock 的模块可以将它们作为通常的工件包含,例如rexsl-core/pom.xml(参见突出显示的行):

  4. 然后,在您的单元测试中,只需使用该模拟库中的类,例如模拟的常规构建器,例如:BulkHttpFeederTest

这就是您可以以一种优雅的方式使您的测试工件可重用的方法。希望能帮助到你。

于 2012-09-10T15:16:16.280 回答
1

@迈凯拉,

我发现这可能会对你有所帮助。只需将 Testcase 类扩展到项目中的一个 java 类,您就可以运行该特定类以将其作为 JUnit 测试运行。

于 2012-09-04T04:57:37.510 回答
1

我不确定这是可取的 - 一方面,如果您使用 jar,它的行为可能会受到外部上下文的影响,例如类路径中的其他库。从 jar 内部,没有简单的方法可以分析此上下文并相应地调整测试。另一方面,如果您编写和编译库,则应在将其打包为 jar 之前对其进行测试。您甚至可能不想包含您的测试。

如果再次运行测试对您来说真的很重要,我会对在不更改 jar 的情况下会导致它们失败的原因感兴趣。但是,在这种情况下,您可能想要扩展 testrunner。据我所知,它使用反射。您可以很容易地在类加载器中加载 jar 并浏览它们的所有类。通过反射,您可以识别测试类并组装测试套件。您可以查看 testrunner 作为示例。尽管如此,您仍需要从外部开始此过程,例如,从客户端项目中的一个测试类内部开始。在这里,QATest 的方法可能会有所帮助:通过提供覆盖版本的 testsuite 或 testrunner,您可以自动执行此操作 - 如果客户端使用您覆盖的 API。

让我知道这种相当昂贵的方法是否适用于您的场景,我可以提供代码示例。

于 2012-09-05T04:41:47.670 回答
0

为什么jar的用户要运行jar里面的测试用例!!!当jar打包交付时,就意味着单元测试运行成功。通常,jar 本身应被视为单独的项目或模块之一。在这两种情况下,单元测试用例都是在交付之前运行的。

于 2012-09-10T09:09:39.757 回答