【问题标题】:Android Studio: Instrument Tests Cannot Find junit, mockito, or hamcrestAndroid Studio:仪器测试找不到 junit、mockito 或 hamcrest
【发布时间】:2016-09-02 04:00:30
【问题描述】:

我们的项目使用了 Cordova,它通过以下方式自定义了 build.gradle 文件:

android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }
}

我阅读了有关设置仪器测试的文档并按照指示配置了我的 gradle 文件:

dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile project(':CordovaLib')
    // other deps

    // !! THIS IS THE INSTRUMENT SETUP!
    // Required -- JUnit 4 framework
    androidTestCompile 'junit:junit:4.12'
    // Optional -- Mockito framework
    androidTestCompile 'org.mockito:mockito-core:1.10.19'

    androidTestCompile 'com.android.support:support-annotations:23.3.0'
    androidTestCompile 'com.android.support.test:runner:0.4.1'
    androidTestCompile 'com.android.support.test:rules:0.4.1'
    // Optional -- Hamcrest library
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
    // Optional -- UI testing with Espresso
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
    // Optional -- UI testing with UI Automator
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
}

我已经同步了 gradle,并且外部 libs 文件夹确实包含所有 junit、hamcrest 和 mockito 文件。进一步证明当我将它们导入我的测试类时它具有自动完成功能(在src\androidTest\java 中正确设置:

package co.appname.app.Utils;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.CoreMatchers.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;

import static org.junit.Assert.*;

public class ColorsTest
{
    @Test
    public void test()
    {
        assertThat(2, is(2));
    }
}

但是当我去编译或运行测试时,我得到了

Error:(5, 17) 错误:包 org.junit 不存在

Error:(6, 24) 错误:包 org.junit.runner 不存在

Error:(7, 27) 错误:包 org.mockito.runners 不存在

错误:(9, 24) 错误:包 org.hamcrest 不存在

我建立了一个新项目(并且没有修改源集)并且我的 Instrumentation 测试运行良好。

我认为我的源集一定有问题。所以我阅读了setting up a gradle file 上的文档,特别是测试部分。

我唯一能找到相关的是这一段:

如前所述,在主 sourceSet 旁边是 androidTest sourceSet,默认位于 src/androidTest/。使用此 sourceSet 构建测试 APK,可以将其部署到设备以使用 Android 测试框架测试应用程序。这可以包含 android 单元测试、仪器测试和 uiautomator 测试。测试应用的清单节点已生成,但您可以创建 src/androidTest/AndroidManifest.xml 文件以将其他组件添加到测试清单中。

但是,我尝试在我的 gradle 文件中这样设置:

androidTest.setRoot('src/androidTests/java') 没用

androidTest.setRoot('tests') 没用

androidTest.setRoot('androidTests') 没用

我的项目似乎找不到 junit 文件,我怀疑它与我的源集被移动有关 某些(因为正如我所说,我的测试项目确实运行了仪器测试)但我有不知道该怎么做才能修复它。如果您有任何建议(甚至是关于我可以在哪里寻找的神秘想法),我将不胜感激!

【问题讨论】:

    标签: android cordova unit-testing gradle junit


    【解决方案1】:

    使用compile 而不是androidTestCompile 可以解决此问题。使用修改后的源集的项目看起来像是 Android 中的一个错误。

    【讨论】:

    • 谢谢,这为我节省了几个小时 - 我不知道该寻找什么。
    【解决方案2】:

    setRoot 差一点就成功了。

    您“仅”必须将它与java.excludes = ['androidTest/**'] 结合起来,这样该文件夹就会从主源集中“释放”:

    android {
        sourceSets {
            main {
                java.excludes = ['androidTest/**']
            }
            androidTest.setRoot('src/androidTest')
        }
    }
    

    现在你可以正确使用androidTestCompile了。

    来源:https://stackoverflow.com/a/33259738/252627

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多