【问题标题】:determine the directory where test cases should be run on it确定应该在其上运行测试用例的目录
【发布时间】:2014-05-07 12:00:10
【问题描述】:

我的程序输入一个 jar 文件和一个包含 Java 源代码的目录。 jar 文件包含应在输入 java 源代码上运行的测试用例。如果我将 java 输入目录定义为源文件夹,那么我可以加载测试用例并运行它们,如下所示:

URLClassLoader clsLoader = URLClassLoader.newInstance(new URL[] {new URL("file:/D:/workspace/tests.jar")});

    //the name of my test case class that I want to load
    Class cls = clsLoader.loadClass("temp.testMulDiv");

    Result result = new JUnitCore().run(cls);
    for (Failure failure : result.getFailures()) 
        System.out.println(failure.toString());

但是,虽然我把源代码作为输入目录,然后测试用例找不到代码。我知道我应该以某种方式告诉测试用例在输入目录中搜索源代码,但我不知道该怎么做。有什么建议吗?

我也检查了这段代码,但我仍然遇到上述问题。虽然我可以加载我想运行的方法,但在这种情况下,“Class.forName”找不到类(“temp.testMulDiv”),我收到“ClassNotFoundException”错误。

URLClassLoader clsLoader = URLClassLoader.newInstance(new URL[] {new URL("file:/D:/workspace/tests.jar")});

    //the name my test case class that I want to load
    Class cls = clsLoader.loadClass("temp.testMulDiv");

    Method[] methods = cls.getDeclaredMethods();
    // I want to run only the first method
    Request request = Request.method(Class.forName(cls.getName()), methods[0].getName());

    Result result = new JUnitCore().run(request);
        for (Failure failure : result.getFailures()) 
            System.out.println(failure.toString());
    }

任何建议,我如何在输入目录(而不是源文件夹)上运行测试用例?我如何以编程方式做到这一点?

【问题讨论】:

    标签: java junit testcase


    【解决方案1】:

    一个好的做法是将测试类与源 Java 类放在同一个包中,以便它们彼此可见。

    例如,在 Maven 中,您将使用 src/main/javasrc/test/java 分别包含源 Java 类和测试类。这些是标准的 Maven 布局。

    假设我在net/java/service 中有一个源Java 类MyService.java

    src/main/java/net/java/service/MyService.java
    

    那我也应该把对应的测试类MyServiceTest.java放到net/java/service中:

    src/test/java/net/java/service/MyService.java
    

    假设您在 MyService.java 中有以下公共方法:

    public void multiDiv(){
      ...
    }
    

    那么你应该在MyServiceTest.java中有如下测试方法:

    @Test
    public void testMultiDiv(){
      MyService service = new MyService();
      service.multiDiv();
      // assert ....
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 2018-07-14
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      相关资源
      最近更新 更多