有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java确定应该在其上运行测试用例的目录

我的程序得到一个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());
    }

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


共 (1) 个答案

  1. # 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中有以下公共方法。爪哇:

    public void multiDiv(){
      ...
    }
    

    那么您应该在MyServiceTest中使用以下测试方法。爪哇:

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