Я не уверен, что вы подразумеваете под:
Я полагаю, что проблема связана с classpath, так как ClassLoader, похоже, только загружает тестируемый класс и не загружает зависимости (например,jars), определенный в classpath внешнего проекта .
Если вы хотите получить доступ к классу в java, вы должны либо поместить его в classpath, либо найти и загрузить его самостоятельно.Кажется, вы добавляете путь к корзине проектов Eclipse в путь к классам, используя собственный загрузчик классов, но Mockery не добавляется в путь к классам.Путь Eclipse bin содержит только те классы, которые вы скомпилировали.Вам нужно будет либо специально загрузить Mockery jar, либо, что лучше, просто поместить все в classpath jvm, используя java -cp
.
ОК, я начинаю понимать проблему.Вы пытаетесь запустить набор тестов в чужом проекте, но он не работает, если тест ссылается на другие зависимости.Короткий ответ: это сложно.Вы пытаетесь выяснить, какие классы вам нужно добавить в ваш classLoader, основываясь на ссылочных классах / банках внешнего проекта.
Есть несколько способов сделать это.Если вы уверены, что внешний проект построен с помощью Eclipse, то вы можете посмотреть на .project
и .classpath
, чтобы найти зависимости внешнего проекта.Это не просто, потому что они могут содержать ссылки на другие контейнеры.Это .classpath из одного из моих проектов:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java"/>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Содержит ссылки на контейнеры, такие как контейнер Maven.Если вы считаете, что это достижимо для ваших проектов, это может быть одним из способов достижения этого.Гораздо лучшим способом было бы принудительное использование maven или аналогичного, и тогда вы могли бы запустить тесты просто
$ mvn test
с дополнительным бонусом: если вы будете запускать и создавать проекты под jenkins, вы будететакже получайте хорошие отчеты.