[英]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.