如何对JSON解析进行单元测试

我正在使用一个Android应用程序,该应用程序是从Web服务下载JSON数据的。解析数据的类如下所示:

public class JsonCourseParser implements CourseParser {

public Course parseCourse(String courseData) {

Course result;

try {

JSONObject jsonObject = new JSONObject(courseData);

...

result = new Course("foo", "bar");

} catch (JSONException e) {

result = null;

}

return result;

}

}

当我parseCourse()从应用程序内部调用时,它构建良好并且可以正常工作,但是当我尝试在单元测试中测试此方法时,出现以下异常:

java.lang.NoClassDefFoundError: org/json/JSONException

at JsonCourseParserTest.initClass(JsonCourseParserTest.java:15)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)

at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)

at org.junit.runners.ParentRunner.run(ParentRunner.java:236)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Caused by: java.lang.ClassNotFoundException: org.json.JSONException

at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

at java.lang.ClassLoader.loadClass(ClassLoader.java:307)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

... 16 more

org.json默认情况下,Android框架随附的软件包的类似乎在Java中不可用。

有没有一种方法可以解决此问题,以便可以对解析JSON的类进行单元测试?

回答:

您需要做的就是将以下行添加到build.gradle的dependency部分中:

testImplementation 'org.json:json:20140107'

请注意,您还需要使用Android Studio 或更高版本,并且至少要使用版本 或更高版本的构建工具才能正常工作!

testImplementation意味着包含该依赖项,因为测试依赖项仅在编译您的项目以执行单元测试时使用。提供的jar将不会包含在您的APK中,仅用于替换org.json包中缺少的类。

以上是 如何对JSON解析进行单元测试 的全部内容, 来源链接: utcz.com/qa/404791.html

回到顶部