簡體   English   中英

單元測試中的異常

[英]Exceptions in unit testing

我復制了書中的單元測試。 完全相同的。 編譯器沒有問題,但是運行時有一些異常。 我的代碼有問題嗎? 如果沒有,那是什么原因,解決方案是什么?

這是我的 class:

package Testing;

public class MessageUtil {

    private String message;

    public MessageUtil(String message) {
        this.message = message;
    }

    public String printMessage() {
        System.out.println(message);
        return message;
    }
    public static void main(String[] args) {
        
    }
}

這是測試用例:

package Testing;

import org.junit.Test;

import junit.framework.TestCase;

public class TestJunit extends TestCase {
    String message = "Hello World";
    MessageUtil messageUtil = new MessageUtil(message);

    @Test
    public void testPrintMessage() {
        assertEquals(message,messageUtil.printMessage());
    }
}

這是測試運行器:

package Testing;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {

    public static void main(String[] args) {
        
        Result result = JUnitCore.runClasses(TestJunit.class);
        for (Failure failure : result.getFailures()) {
            System.out.println(failure.toString());
        }
        System.out.println(result.wasSuccessful());
    }
}

這是打印的異常:

Exception in thread "main" java.lang.NoClassDefFoundError: junit/framework/TestCase
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:825)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:723)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:646)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at Testing.TestRunner.main(TestRunner.java:11)
Caused by: java.lang.ClassNotFoundException: junit.framework.TestCase
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 10 more

看起來您正在使用一本過時的書來學習 JUnit。 我最初的建議是購買更新版本,涵蓋最新版本的 JUnit,或直接在 JUnit 網站上查找文檔: Z5E056C500A1C4B6A7110B50D807/BADE5Z://itjunit。

Answering your question, the java.lang.ClassNotFoundException is thrown when the Java Virtual Machine (JVM) tries to load a class and this specified class cannot be found in the classpath. 在您的情況下, JVM未找到 junit.framework.TestCase 類型,因此它無法編譯/運行您的 Java 程序。

您可以通過將 JUnit Jar 添加到類路徑來解決此問題。 查看此頁面以了解如何執行此操作: https://examples.javacodegeeks.com/how-to-set-classpath-in-java/

Ps: You didn't mention which IDE you are using, so I suggest you start by taking a look into VisualStudioCode with the Java Extension Pack installed, as suggested here: https://junit.org/junit5/docs/current/user -guide/#running-tests-ide-vscode

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM