2009-09-15 2 views
2

Я пытаюсь запустить образцы тестов, которые поставляются с junit4.7, и с некоторыми трудностями.Проблемы с путями Junit и Java - OS X

java уважает моих CLASSPATH:

[email protected] ~/Desktop> export CLASSPATH= 
[email protected] ~/Desktop> echo $CLASSPATH 

[email protected] ~/Desktop> java junit.textui.TestRunner junit.samples.AllTests 
Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/TestRunner 
[email protected] ~/Desktop> source /etc/profile 
[email protected] ~/Desktop> echo $CLASSPATH 
:/Library/Java/Extensions/junit/:/Library/Java/Extensions/junit/junit.jar 
[email protected] ~/Desktop> java junit.textui.TestRunner junit.samples.AllTests 
Exception in thread "main" java.lang.NoClassDefFoundError: junit/framework/Test 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:164) 
    at junit.runner.BaseTestRunner.loadSuiteClass(BaseTestRunner.java:207) 
    at junit.runner.BaseTestRunner.getTest(BaseTestRunner.java:100) 
    at junit.textui.TestRunner.start(TestRunner.java:179) 
    at junit.textui.TestRunner.main(TestRunner.java:138) 

, но как вы можете видеть, это не удалось найти junit/framework/Test ... Я посмотрел в /Library/Java/Extensions/junit/junit.jar и включен, однако.

/Library/Java/Extensions/junit/junit.jar является символической ссылкой. Все хорошо?

+0

Что произойдет, если вы добавите переменную -classpath в командную строку и укажите банку напрямую? – akf

+0

с -cp и unset $ CLASSPATH Я получаю те же результаты, даже без использования символической ссылки. – ashgromnies

ответ

5

Попробуйте помещать JAR-файл junit непосредственно в каталог Extensions вместо создания подкаталога для него. Я просто скопировал JUnit-4.6.jar в каталог/Library/Java/Extenstions и выполняется класс TestRunner без проблем

% java junit.textui.TestRunner 
Usage: TestRunner [-wait] testCaseName, where name is the name of the TestCase class 

Удаление библиотеки из результатов каталога расширений в ожидаемое исключение

 
Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/TestRunner 
-1

Возможно, использование символической ссылки вызывает вашу проблему. Попытка добавить банку, на которую указывает символическая ссылка, и повторить попытку.

Однако, глядя на java man page for mac os x, похоже, нет такого ограничения.

+0

Я сделал это без символической ссылки, и я все еще получаю то же самое. – ashgromnies

0

Некоторые вещи, чтобы исследовать:

ли junit.jar файл в указанном месте, и это читаемым? Является ли CLASSPATH экспортированным/etc/profile? Работает ли он, когда вы устанавливаете «-cp $ CLASSPATH» вместо командной строки? Попробуйте удалить ведущую двоеточие в пути к классам - там не должно быть.

+0

Да, junit.jar существует там с разрешениями 755. CLASSPATH экспортируется/etc/profile. Отключение CLASSPATH и использование -cp дают мне те же результаты. Ведущая толстая кишка, похоже, тоже не влияет на нее. – ashgromnies

5

Хорошо, я только что скачал JUnit 4.7, распаковали файл почтового индекса, изменил каталог в папку и успешно запустил следующую команду:

$ java -cp .:junit-4.7.jar junit.textui.TestRunner junit.samples.AllTests 
......................................... 
......................................... 
......................................... 
....... 
Time: 3.255 

OK (130 tests)

Это было на OSX.

Я думаю, что в вашем примере ваш путь к классу немного испорчен. Попробуйте следующее:

.:/Library/Java/Extensions/junit:/Library/Java/Extensions/junit/junit.jar

Посмотрите различия? Я добавил . (текущий каталог), и я удалил конечную косую черту из каталога junit.

UPDATE: Я просто проверял с линком и что, кажется, работает тоже:

$ ln -s junit-4.7.jar junit.jar 
$ java -cp .:junit.jar junit.textui.TestRunner junit.samples.AllTests 
......................................... 
......................................... 
......................................... 
....... 
Time: 2.569 

OK (130 tests) 
3

ли вы построить JAR самостоятельно? Это похоже на то, что JAR построен без аннотации.

При компиляции JUnit с

javac -proc none ... 

Вы получите эту ошибку.