【问题标题】:AndroidTest Failed while running from command line :app:connectedDebugAndroidTest从命令行运行时AndroidTest失败:app:connectedDebugAndroidTest
【发布时间】:2016-12-11 09:38:04
【问题描述】:

我正在使用 android spring RestTemplate 在我的应用程序上进行 REST 服务调用。我添加了 android Instrumentation 测试,其中包括模拟 REST 服务调用。 从 android studio 运行时,我的所有测试都运行良好,但是使用

从终端运行时测试无法加载 spring 模拟类
   ./gradlew clean :app:connectedDebugAndroidTest

spring test对build.gradle的依赖

    androidTestCompile("org.springframework:spring-test:3.2.8.RELEASE")

如果我更改为 compile 而不是 androidTestCompile ,则 android 测试从终端运行良好。 由于我不希望这种对我的生产 APK 的依赖有任何帮助,因此不胜感激。

这是开始测试时的日志

08-05 00:04:12.585 22274-22302/com.libin.androiduitesting E/TestLoader:找不到类: org.springframework.asm.commons.JSRInlinerAdapter 08-05 00:04:12.587 22274-22302/com.libin.androiduitesting E/TestLoader:找不到 类:org.springframework.asm.commons.TryCatchBlockSorter 08-05 00:04:12.593 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.cglib.transform.AbstractProcessTask 08-05 00:04:12.593 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.cglib.transform.AbstractTransformTask 08-05 00:04:12.603 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.core.convert.support.ConvertingPropertyEditorAdapter 08-05 00:04:12.610 22274-22302/com.libin.androiduitesting E/TestLoader:找不到类: org.springframework.core.io.ResourceEditor 08-05 00:04:12.611 22274-22302/com.libin.androiduitesting E/TestLoader:找不到 类:org.springframework.core.io.support.ResourceArrayPropertyEditor 08-05 00:04:12.617 22274-22302/com.libin.androiduitesting E/TestLoader:找不到类: org.springframework.mock.http.MockHttpInputMessage 08-05 00:04:12.618 22274-22302/com.libin.androiduitesting E/TestLoader:找不到 类:org.springframework.mock.http.MockHttpOutputMessage 08-05 00:04:12.618 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.mock.http.client.MockClientHttpRequest 08-05 00:04:12.618 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.mock.http.client.MockClientHttpResponse 08-05 00:04:12.618 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.mock.jndi.ExpectedLookupTemplate 08-05 00:04:12.619 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.mock.jndi.SimpleNamingContext 08-05 00:04:12.619 22274-22302/com.libin.androiduitesting E/TestLoader:找不到 类:org.springframework.mock.jndi.SimpleNamingContextBuilder 08-05 00:04:12.619 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.mock.web.DelegatingServletInputStream 08-05 00:04:12.619 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.mock.web.DelegatingServletOutputStream 08-05 00:04:12.620 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类:org.springframework.mock.web.MockBodyContent 08-05 00:04:12.620 22274-22302/com.libin.androiduitesting E/TestLoader:找不到类: org.springframework.mock.web.MockExpressionEvaluator 08-05 00:04:12.620 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类:org.springframework.mock.web.MockFilterChain 08-05 00:04:12.620 22274-22302/com.libin.androiduitesting E/TestLoader:找不到类: org.springframework.mock.web.MockFilterConfig 08-05 00:04:12.620 22274-22302/com.libin.androiduitesting E/TestLoader:找不到 类:org.springframework.mock.web.MockHttpServletRequest 08-05 00:04:12.621 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.mock.web.MockHttpServletResponse 08-05 00:04:12.621 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类:org.springframework.mock.web.MockHttpSession 08-05 00:04:12.621 22274-22302/com.libin.androiduitesting E/TestLoader:找不到类: org.springframework.mock.web.MockJspWriter 08-05 00:04:12.621 22274-22302/com.libin.androiduitesting E/TestLoader:找不到 类:org.springframework.mock.web.MockMultipartFile 08-05 00:04:12.621 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.mock.web.MockMultipartHttpServletRequest 08-05 00:04:12.622 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类:org.springframework.mock.web.MockPageContext 08-05 00:04:12.622 22274-22302/com.libin.androiduitesting E/TestLoader:找不到类: org.springframework.mock.web.MockRequestDispatcher 08-05 00:04:12.623 22274-22302/com.libin.androiduitesting E/TestLoader:找不到 类:org.springframework.mock.web.MockServletConfig 08-05 00:04:12.623 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类:org.springframework.mock.web.MockServletContext 08-05 00:04:12.628 22274-22302/com.libin.androiduitesting E/TestLoader:找不到类: org.springframework.mock.web.PassThroughFilterChain 08-05 00:04:12.628 22274-22302/com.libin.androiduitesting E/TestLoader:找不到 类:org.springframework.mock.web.portlet.MockActionRequest 08-05 00:04:12.629 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类: org.springframework.mock.web.portlet.MockActionResponse 08-05 00:04:12.629 22274-22302/com.libin.androiduitesting E/TestLoader: 找不到类:org.springframework.mock.web.portlet.MockBaseURL 08-05 00:04:12.629 22274-22302/com.libin.androiduitesting E/TestLoader:找不到类: org.springframework.mock.web.portlet.MockCacheControl 08-05 00:04:12.630 22274-22302/com.libin.androiduitesting E/AndroidRuntime: 致命异常:Instr:android.support.test.runner.AndroidJUnitRunner 进程:com.libin.androiduitesting,PID:22274 java.lang.NoClassDefFoundError: org.springframework.mock.web.portlet.MockClientDataRequest 在 java.lang.Class.classForName(本机方法) 在 java.lang.Class.forName(Class.java:324) 在 android.support.test.internal.runner.TestLoader.doLoadClass(TestLoader.java:92) 在 android.support.test.internal.runner.TestLoader.loadIfTest(TestLoader.java:113) 在 android.support.test.internal.runner.TestRequestBuilder.loadClassesFromClassPath(TestRequestBuilder.java:801) 在 android.support.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:747) 在 android.support.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:354) 在 android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:260) 在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1879)

【问题讨论】:

  • testCompile 呢?
  • 如@cricket_007 所说,将androidTestCompile 更改为testCompile。有效吗?
  • 没有。它是如何工作的?添加到 testCompile 的依赖项仅包含在单元测试中。我正在运行 androidTest。它不会包含 androidTest 上的 spring 测试库
  • 如果你可以添加你的 build.gradle 文件。现在想帮你的人都像魔术师,好吗?

标签: android android-espresso spring-test android-instrumentation spring-android


【解决方案1】:

似乎您缺少测试所需的模拟类。尝试下载 spring-test jar 并检查是否所有模拟类都在里面 - 例如,它应该从包 org.springframework.mock.web.portlet 中导出类 org.springframework.mock.web.portlet.MockClientDataRequest

您可能正在使用一些不幸的 jar 构建,其中模拟类的依赖项丢失了,例如 this issue

你也可以试试更新spring framework,最新的已经是4.3.2了。

【讨论】:

  • 不,我没有错过课程。在开始运行时加载整个模块的测试时看到它被删除。如果测试针对单个类或包运行,一切都很好
猜你喜欢
  • 2016-01-17
  • 2018-02-24
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 2019-05-28
  • 2015-04-02
  • 1970-01-01
  • 2017-01-25
相关资源
最近更新 更多