当前位置: 首页 > 知识库问答 >
问题:

类的嘲笑方法

厍浩广
2023-03-14

运行jUnit时的异常

class JSONTool {
    private static MipLogger logger = MipLogger.getLogger(MIPJsonTool.class);

    public Object fetch(String url) {
        return invokeEndPoint(url, 2000, new HashMap<String, String>());
    }
}

我想测试这个类,下面是测试方法

public void testFetchString() {
    JSONTool mipJsonTool = new JSONTool();
    JSONTool mipJsonTool1 = Mockito.spy(mipJsonTool);       
    Mockito.doReturn(new JSONObject()
            .put("status", 200))
            .when(mipJsonTool1)
            .fetch("http://localhost:5000/author");
    Object obj = mipJsonTool1.fetch("http://localhost:5000/author");
    System.out.println("Done!");
}

运行junit会产生以下异常

java。lang.NoClassDefFoundError:org/apache/logging/log4j/util/ReflectionUtil由以下原因引起:java。lang.ClassNotFoundException:org。阿帕奇。登录中。log4j。util。反射率直到

共有1个答案

沈嘉瑞
2023-03-14

NoClassDefFoundError是Java运行时系统尝试加载类定义时引发的错误,并且该类定义不再可用。所需的类定义在编译时存在,但在运行时缺失。

检查记录器配置和已使用的jar。

同时,您可以为org.apache.logging.log4j.util.提供缺少的依赖项

将log4j版本更改为2.8.2,看看是否有帮助

//编辑版本

我已经创建了一个具有以下配置的项目,以使记录器正常工作

build.gradle

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java Library project to get you started.
 * For more details take a look at the Java Libraries chapter in the Gradle
 * user guide available at https://docs.gradle.org/5.0/userguide/java_library_plugin.html
 */

plugins {
    // Apply the java-library plugin to add support for Java Library
    id 'java-library'
}

repositories {
    // Use jcenter for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

dependencies {
    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'
    api 'org.apache.logging.log4j:log4j-web:2.8.2'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:26.0-jre'


    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'
}

创建一个log4j2。src/main/resources下的属性文件,包含以下条目,用于向控制台显示日志

appender.console.type = Console
appender.console.name = STDOUT


rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT

下面是调用记录器的Java代码(为了进行测试,我将其放在一个main方法中)

package GradleEclipseTestProject;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class GradleLog4jTest {


    public static void main(String[] args) {
        System.out.println("Testing log4j dependencies");
        Logger logger = LogManager.getLogger();
        logger.info("This is a sample logger");
    }

}
 类似资料:
  • 以下是日志供参考: IllegalStateException:无法转换名为com.xyz.TestLoad的类。原因:java.io.ioException:无效常量类型:在org.powermock.core.classloader.mockClassLoader.loadModifiedClass(MockClassLoader.java:180)在org.powermock.core.cl

  • 当我试图模仿javax.ws.rs.core 时,我得到一条错误消息: 无法创建JAX-RS运行时委托 为什么会发生这种情况? 但是,当我试图嘲笑HttpServlet响应时,这是没有问题的!

  • 我提到了这个答案,我该如何模拟java。时间本地日期。now()关于如何模拟我的LocalDateTime。now()调用。我基本上遵循了所有步骤,但只使用了LocalDateTime而不是LocalDate。 我的代码的功能是这样的,它应该只在一小时的第15或45分钟运行。因此,我将LOCAL\u DATE\u TIME静态变量设置为: 然后在我的@Before测试方法中,我有以下内容: 这是2

  • 我目前正在做一个小项目,作为Java测试课程的实习,我们试图看看mocking是如何工作的。 我们的目标是看到我们可以忽略我们所嘲笑的类中的错误。 正如您在Collaborateur中看到的,缺少一个“;”在System.Out之后,exercice的目标是表明嘲笑这个类可以让我们忽略这个错误。我的一些同事使用Eclipse时,使用“以JUnit形式运行”功能没有问题。 在Intellij中,我没

  • 我试图在中模拟axios和。到目前为止,这是我的代码: 据我所知,这和文件里的一模一样 确切的例子: 并且我得到了 我错过了什么?