Junit und Java Classpath Leiden - OS X
Frage
Ich versuche, die Probe-Tests auszuführen, die mit junit4.7 kommen und einige Schwierigkeiten haben.
java
respektiert meinen CLASSPATH
:
me@dinosaurhunter ~/Desktop> export CLASSPATH=
me@dinosaurhunter ~/Desktop> echo $CLASSPATH
me@dinosaurhunter ~/Desktop> java junit.textui.TestRunner junit.samples.AllTests
Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/TestRunner
me@dinosaurhunter ~/Desktop> source /etc/profile
me@dinosaurhunter ~/Desktop> echo $CLASSPATH
:/Library/Java/Extensions/junit/:/Library/Java/Extensions/junit/junit.jar
me@dinosaurhunter ~/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)
aber wie Sie sehen können, ist es nicht in der Lage junit/framework/Test
zu finden ... Ich schaute in dem /Library/Java/Extensions/junit/junit.jar
und es enthalten ist, though.
/Library/Java/Extensions/junit/junit.jar
ist ein symbolischer Link. Ist das in Ordnung?
Lösung
Versuchen Sie, die JUnit-JAR-Datei direkt in das Verzeichnis Extensions statt der Schaffung ein Unterverzeichnis für sie setzen. Ich kopiere nur die junit-4.6.jar in / Library / Java / Extenstions Verzeichnis und ausgeführt, um die Testrunner Klasse ohne Probleme
% java junit.textui.TestRunner Usage: TestRunner [-wait] testCaseName, where name is the name of the TestCase class
Löschen der Bibliothek aus dem Verzeichnis Extensions Ergebnisse in der erwarteten Ausnahme
Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/TestRunner
Andere Tipps
Ok, Ich habe gerade heruntergeladen JUnit 4.7, entpackt die Zip-Datei, geändert Verzeichnis in den Ordner und lief der folgende Befehl erfolgreich:
$ java -cp .:junit-4.7.jar junit.textui.TestRunner junit.samples.AllTests
.........................................
.........................................
.........................................
.......
Time: 3.255
OK (130 tests)
Das war auf OSX.
Ich denke, in Ihrem Beispiel Classpath ist ein wenig durcheinander. Versuchen Sie folgendes:
.:/Library/Java/Extensions/junit:/Library/Java/Extensions/junit/junit.jar
die Unterschiede sehen? Ich fügte hinzu, das .
(aktuelles Verzeichnis) und ich entfernte den Schrägstrich aus dem JUnit-Verzeichnis.
UPDATE: Ich habe mit einem Symlink getestet und das scheint zu funktionieren:
$ ln -s junit-4.7.jar junit.jar
$ java -cp .:junit.jar junit.textui.TestRunner junit.samples.AllTests
.........................................
.........................................
.........................................
.......
Time: 2.569
OK (130 tests)
Haben Sie bauen die JAR selbst? Das sieht aus wie die JAR ohne Anmerkung gebaut wird.
Wenn Sie die JUnit kompilieren mit
javac -proc none ...
Sie werden diese Fehler erhalten.
Einige Dinge zu untersuchen:
Ist die junit.jar Datei in dem von Ihnen angegebenen Speicherort, und ist es lesbar? Ist CLASSPATH von / etc / profile exportiert? Funktioniert es, wenn Sie „-cp $ CLASSPATH“ statt auf der Kommandozeile gesetzt? Versuchen Sie, den führenden Doppelpunkt in der Classpath zu entfernen -. Sollte nicht da sein
Es ist möglich, dass ein Symlink mit Ihrem Problem verursacht. Der Versuch, das Glas hinzufügen, die zu Symlink zeigt, und versuchen Sie es erneut.
suchen jedoch auf java-man-Seite für mac os x es scheint nicht eine solche Beschränkung zu sein.