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

时间:2014-05-07 00:55:22

标签: java junit testcase

我的程序获取一个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 个答案:

答案 0 :(得分:0)

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

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

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

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 ....
}