TestNG не находит тесты с помощью программного вызова - PullRequest
0 голосов
/ 06 января 2019

У меня есть TestNG для набора некоторых тестов из внешнего файла Jar. Проблема в том, что когда я вызываю вызов, они фактически не запускаются.

Я делаю это:

XmlSuite suite = new XmlSuite();
suite.setName("Invoked Run");

XmlTest test = new XmlTest(suite);
test.setName("Invoked Run");
test.setParallel(XmlSuite.ParallelMode.NONE);
test.setXmlPackages(Collections.singletonList(new XmlPackage("com.eln00b.*")));
test.setTimeout(TimeUnit.SECONDS.toMillis(300));

TestNG testNg = new TestNG();
testNg.setOutputDirectory(persisPath);
testNg.setXmlSuites(Collections.singletonList(suite));

URLClassLoader customClassLoader = URLClassLoader.newInstance(jarUrls);
testNg.addClassLoader(customClassLoader);

testNg.run();
int status = testNg.getStatus();

Статус всегда 8 (HAS_NO_TEST).

Я знаю, что Jars находятся в загрузчике классов, потому что я могу запустить:

customClassLoader.loadClass("com.eln00b.MyTest");

HELP !!!!!

1 Ответ

0 голосов
/ 06 января 2019

Мне удалось обойти мою проблему, используя библиотеку Reflections . Эта проблема в TestNG должна получить пример проекта, который выполняет основную проблему происходящего, но для того, что мне нужно, это работает отлично. Вот код, на который я переключился, чтобы добиться успеха:

ВАЖНОЕ ПРИМЕЧАНИЕ: Я должен был использовать отражения 0.9.10 и , а не 0.9.11 (последний на данный момент). Мне нужно выяснить, что не так в этой другой версии.

URLClassLoader customClassLoader = URLClassLoader.newInstance(jarUrls);
Optional<Class<?>> oTestClass = findClass("SomeCriteria", urlClassLoader);
Class<?> testClass = oTestClass.orElseThrow(IOException::new);

XmlSuite suite = new XmlSuite();
suite.setName("Invoked Run");

XmlClass xmlClass = new XmlClass(testClass);

XmlTest test = new XmlTest(suite);
test.setName("Invoked Run");
test.setParallel(XmlSuite.ParallelMode.NONE);
test.setXmlClasses(Collections.singletonList(xmlClass));
test.setTimeout(TimeUnit.SECONDS.toMillis(300));

TestNG testNg = new TestNG();
testNg.setOutputDirectory(persisPath);
testNg.setXmlSuites(Collections.singletonList(suite));

testNg.run();
int status = testNg.getStatus();

Логика поиска класса довольно проста:

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setUrls(ClasspathHelper.forClassLoader(classLoader));
configurationBuilder.addClassLoader(classLoader);

Reflections reflections = new Reflections(configurationBuilder);
Set<Class<?>> scenarioClasses = reflections.getTypesAnnotatedWith(Test.class);

// filter classes here with criteria

Я попытаюсь написать что-то еще, что касается ошибки , которая является полным примером, но это дает мне ответ на проблему, характерную для моей проблемы, которая породила этот вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...