class 的模拟方法
mocking method of class
运行 junit
时出现异常
class JSONTool {
private static MipLogger logger = MipLogger.getLogger(MIPJsonTool.class);
public Object fetch(String url) {
return invokeEndPoint(url, 2000, new HashMap<String, String>());
}
}
我想测试这个class 下面是测试方法
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
Caused by: java.lang.ClassNotFoundException:
org.apache.logging.log4j.util.ReflectionUtil
NoClassDefFoundError 是当 Java 运行时系统尝试加载 class 的定义时抛出的错误,并且 class 定义不再可用。所需的 class 定义在编译时存在,但在运行时缺失。
检查您使用的记录器配置和 jar。
同时您可以为 org.apache.logging.log4j.util.ReflectionUtil
提供缺少的依赖项
将 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'
}
在 src/main/resources 下创建一个 log4j2.properties 文件,其中包含以下条目以向控制台显示日志
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");
}
}
运行 junit
时出现异常class JSONTool {
private static MipLogger logger = MipLogger.getLogger(MIPJsonTool.class);
public Object fetch(String url) {
return invokeEndPoint(url, 2000, new HashMap<String, String>());
}
}
我想测试这个class 下面是测试方法
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 Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.util.ReflectionUtil
NoClassDefFoundError 是当 Java 运行时系统尝试加载 class 的定义时抛出的错误,并且 class 定义不再可用。所需的 class 定义在编译时存在,但在运行时缺失。
检查您使用的记录器配置和 jar。
同时您可以为 org.apache.logging.log4j.util.ReflectionUtil
提供缺少的依赖项将 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'
}
在 src/main/resources 下创建一个 log4j2.properties 文件,其中包含以下条目以向控制台显示日志
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");
}
}