определить каталог, в котором должны запускаться тестовые примеры

Моя программа получает в качестве входных данных файл 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());
    }

Любое предложение, как я могу запускать тестовые примеры во входном каталоге (а не в исходной папке)? Как программно я могу это сделать?


person user3610234    schedule 07.05.2014    source источник


Ответы (1)


Хорошей практикой является размещение тестовых классов в том же пакете, что и исходные классы Java, чтобы они были видны друг другу.

Например, в Maven у вас будут src/main/java и src/test/java для содержания исходных классов Java и тестовых классов соответственно. Это стандартные макеты Maven.

Скажем, у меня есть исходный класс Java MyService.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 ....
}
person Oh Chin Boon    schedule 07.05.2014