Java 单元测试中的异常

Java 单元测试中的异常,java,unit-testing,junit5,noclassdeffounderror,Java,Unit Testing,Junit5,Noclassdeffounderror,我复制了一本书中的单元测试。完全一样。编译器中没有问题,但在运行时会出现一些异常。我的密码有问题吗?如果没有,原因是什么?解决方案是什么 这是我的班级: 封装测试; 公共类MessageUtil{ 私有字符串消息; public MessageUtil(字符串消息){ this.message=消息; } 公共字符串printMessage(){ System.out.println(消息); 返回消息; } 公共静态void main(字符串[]args){ } } 这是一个测试用例: 封装

我复制了一本书中的单元测试。完全一样。编译器中没有问题,但在运行时会出现一些异常。我的密码有问题吗?如果没有,原因是什么?解决方案是什么

这是我的班级:

封装测试;
公共类MessageUtil{
私有字符串消息;
public MessageUtil(字符串消息){
this.message=消息;
}
公共字符串printMessage(){
System.out.println(消息);
返回消息;
}
公共静态void main(字符串[]args){
}
}
这是一个测试用例:

封装测试;
导入org.junit.Test;
导入junit.framework.TestCase;
公共类TestJunit扩展了TestCase{
String message=“Hello World”;
MessageUtil MessageUtil=newmessageutil(消息);
@试验
public void testPrintMessage(){
assertEquals(message,messageUtil.printMessage());
}
}
这是测试跑步者:

封装测试;
导入org.junit.runner.JUnitCore;
导入org.junit.runner.Result;
导入org.junit.runner.notification.Failure;
公共类测试运行程序{
公共静态void main(字符串[]args){
结果=JUnitCore.runClasses(TestJunit.class);
for(失败: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网站上查找文档:

在回答您的问题时,当java虚拟机(JVM)尝试加载一个类而在类路径中找不到此指定的类时,会抛出java.lang.ClassNotFoundException。在您的例子中,JVM没有找到junit.framework.TestCase类型,因此它无法编译/运行Java程序

您可以通过向类路径添加JUnit Jar来解决这个问题。请查看本页,了解如何做到这一点:


Ps:您没有提到您正在使用哪个IDE,所以我建议您先看看安装了Java扩展包的VisualStudioCode,如下所示:。

您的库/构建路径中没有Junit jar。这看起来非常奇怪。
TestCase
类是JUnit3,它已经过时一百万年了。同时,您正在使用JUnit5进行标记。我认为你要做的第一件事是:找一本更好的书。你真的不应该学习JUnit3风格的测试。是的,你得到的异常意味着:你的运行时类路径设置不正确。您没有告诉JRE在哪里查找运行代码所需的类。您是在古董书店买的书吗?你的代码闻起来很像Java1.4甚至更老的版本,大概有15-30年的历史。