Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Class.forname异常_Java_Junit_Classpath - Fatal编程技术网

Java Class.forname异常

Java Class.forname异常,java,junit,classpath,Java,Junit,Classpath,我想用这种方式运行junit测试: 我有以下文件: ./tested/Resta.java ./tested/Suma.class ./tested/Suma.java ./tested/Resta.class /test/TestResta.class ./test/TestSuma.java /test/TestSuma.class ./test/TestResta.java ./spumevalador.class ./Spumevaluador.java 当我运行Spumevaluado

我想用这种方式运行junit测试:

我有以下文件:

./tested/Resta.java
./tested/Suma.class
./tested/Suma.java
./tested/Resta.class
/test/TestResta.class
./test/TestSuma.java
/test/TestSuma.class
./test/TestResta.java
./spumevalador.class
./Spumevaluador.java

当我运行Spumevaluador(java-cp/home/minyatur/.netbeans/7.2/modules/ext/junit-4.10.jar:.Spumevaluador)时,我遇到以下错误:

minyatur@orome:~/codigo$。/ejecta.sh 赫拉 线程“main”java.lang.NoClassDefFoundError中出现异常:test/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(URLClassLoader.java:355) 位于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(本机方法) 位于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);
    }
}
import org.junit.runner.JUnitCore;
导入java.util.Iterator;
导入org.junit.internal.TextListener;
导入org.junit.runner.Computer;
导入org.junit.runner.Request;
导入org.junit.runner.Result;
导入org.junit.runner.notification.Failure;
导入java.util.ArrayList;
公共级Spumevaluador{
公共静态void main(字符串[]args)引发ClassNotFoundException{
系统输出打印号(“Hola”);
ArrayList clases=新的ArrayList();
添加(“test.TestSuma”);
添加(“test.TestResta”);
Class[]cClases=新类[clases.size()];
对于(int i=0;i
如果我更改Class.forname(“TestSuma”),对Class.forname的调用似乎找不到test.TestSuma;并将../test包含在类路径中,这样效果很好


为什么??有什么想法吗?

基本上,当您运行
Class.forName(“test.TestSuma”)
时,它试图在一个名为
test
的包中加载一个名为
TestSuma
的类。它在一个名为
TestSuma.class
的目录中的名为
test
的类文件中查找

它查找文件-但它加载的类实际上在默认包中被称为
TestSuma
。。。所以它失败了


现在还不清楚您想要实现什么,但是您应该将类文件保存在与包结构匹配的结构中,并且只尝试使用适当的完全限定类名加载文件。

基本上是在运行
class.forName(“test.TestSuma”)时
它试图在名为
test
的包中加载名为
TestSuma
的类。它在一个名为
TestSuma.class
的目录中的名为
test
的类文件中查找

它查找文件-但它加载的类实际上在默认包中被称为
TestSuma
。。。所以它失败了


现在还不清楚您想要实现什么,但是您应该将类文件保存在与包结构匹配的结构中,并且只尝试使用适当的完全限定类名加载文件。

听起来您的TestSuma类是在默认包中定义的,而不是在测试包中定义的。尝试添加:

package test;
到TestSuma.java文件的顶部


Java类路径包含Java可以找到包层次结构根的位置。如果测试包中有一个类,则需要将包含“test”子目录的目录放置在类路径中,而不是测试子目录本身。

听起来您的TestSuma类是在默认包而不是测试包中定义的。尝试添加:

package test;
到TestSuma.java文件的顶部


Java类路径包含Java可以找到包层次结构根的位置。如果测试包中有类,则需要将包含“test”子目录的目录放置在类路径中,而不是测试子目录本身。

对不起,这是一个愚蠢的错误。TestSuma.java中没有定义包测试。@minyatur:查看
TestSuma
的源代码。它不会在package
test
中声明-但是您要求在package
test
中声明一个类。因此,即使Java找到了该文件,它也知道它还没有找到您想要的类。你得让他们配合起来。包不仅仅是类在哪里找到的问题。对不起,这是一个愚蠢的错误。TestSuma.java中没有定义包测试。@minyatur:查看
TestSuma
的源代码。它不会在package
test
中声明-但是您要求在package
test
中声明一个类。因此,即使Java找到了该文件,它也知道它还没有找到您想要的类。你得让他们配合起来。包不仅仅是类在哪里找到的问题。