java - 类名异常

标签 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
./Spumevaluador.class
./Spumevaluador.java

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

minyatur@orome:~/codigo$ ./ejecuta.sh 你好 线程“main”java.lang.NoClassDefFoundError中出现异常:test/TestSuma(错误名称:TestSuma) 在 java.lang.ClassLoader.defineClass1( native 方法) 在 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( native 方法) 在 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 方法) 在 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("TestSuma"); ,对 Class.forname 的调用似乎找不到 test.TestSuma;并在类路径中包含 ../test ,它工作正常。

为什么?有什么想法吗?

最佳答案

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

package test;

到 TestSuma.java 文件的顶部。

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

关于java - 类名异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14926144/

相关文章:

java - 构造函数中输入的类型不正确

java - Android Studio findViewById(R.id.button1) 错误

java - 如何使用 JMockit 模拟/伪造一个新的枚举值

java - 无法在 Tomcat 的应用程序中加载 .properties

从 AIX 运行时出现 java.lang.NoClassDefFoundError : javax. mail.Address 错误

Java:类路径 JVM 上的多个资源中的哪一个?

java - 在日志系统中分离生命周期事件的适当方法是什么?

Maven安装: "Annotations are not supported in -source 1.3"

java - 如果在@BeforeEach 方法中抛出异常,@AfterEach 是否仍然运行

java - setAlignmentY 不在 BorderLayout 中将 JLabel 居中