все I'am пытается запустить JUnit тестов следующим образом:Class.forName Исключение
Я эти файлы:
./tested/Resta.java
./tested/Suma. класс
./tested/Suma.java
./tested/Resta.class
./test/TestResta.class
./test/TestSuma.java
./test/TestSuma.class
./ контрольная работа /TestResta.java
./Spumevaluador.class
./Spumevaluador.java
Когда я бегу Spumevaluador (Java -cp /home/minyatur/.netbeans/7.2/modules/ext/junit-4.10.jar :. Spumevaluador) Я получаю эту ошибку:
minyatur @ Оромэ: ~/Codigo $ ./ejecuta.sh Hola Исключение в потоке "главный" java.lang.NoClassDefFoundError: тест/TestSuma (неправильное название: TestSuma) в java.lang.ClassLoader.defineClass1 (Родной метод) на java.lang.ClassLoader.defineClass (ClassLoader.java:787) на java.security.SecureClassLoader.defineClass (SecureClassLoader.java:142) в java.net.URLClassLoader .defineClass (URLClassLoader.java:447) на java.net.URLClassLoader.access $ 100 (URLClassLoader.java:71) на java.net.URLClassLoader $ 1.run (URLClassLoader.java:361) на java.net.URLClassLoader $ 1.run (URLClas sLoader.java:355) at java.security.AccessController.doPrivileged (собственный метод) на java.net.URLClassLoader.findClass (URLClassLoader.java:354) на java.lang.ClassLoader.loadClass (ClassLoader.java:423) в sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:308) в java.lang.ClassLoader.loadClass (ClassLoader.java:356) в java.lang.Class.forName0 (Native Method) в java.lang.Class.forName (Class.java:188) на Spumevaluador.main (Spumevaluador.java:45)
код Spumevaluador.java:
import org.junit.runner.JUnitCore;
import java.util.Iterator;
import org.junit.internal.TextListener;
import org.junit.runner.Computer;
import org.junit.runner.Request;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import java.util.ArrayList;
public class Spumevaluador {
public static void main(String[] args) throws ClassNotFoundException {
System.out.println("Hola");
ArrayList clases = new ArrayList();
clases.add("test.TestSuma");
clases.add("test.TestResta");
Class<?>[] cClases = new Class<?>[clases.size()];
for (int i = 0; i < clases.size(); i++) {
cClases[i] = Class.forName(clases.get(i).toString());
}
Request req = Request.classes(cClases);
JUnitCore jUnitCore = new JUnitCore();
jUnitCore.addListener(new TextListener(System.out));
jUnitCore.run(req);
}
}
Кажется, что вызов Class.forname не находит test.TestSuma, если я изменю Class.forname («TestSuma»); и включают в себя ./test в classpath, он отлично работает.
Почему? Есть идеи?
Прошу прощения, это глупая ошибка. тест пакета не был определен в TestSuma.java. – minyatur
@minyatur: Посмотрите на * исходный код * для 'TestSuma'. Он не будет объявлен в пакете 'test', но вы * попросили * для класса, который находится в пакете' test'. Поэтому, хотя Java находит файл, он знает, что он * не нашел класс, о котором вы просите. Вы должны заставить их совпасть. Пакеты * не являются * просто вопросом, где находятся классы. –