Android Studio:仪器测试无法找到junit,mockito或hamcrest

时间:2016-05-07 00:25:45

标签: android cordova unit-testing gradle junit

我们的项目使用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));
    }
}

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

  

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

     

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

     

错误:(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文件,我怀疑它有某些东西与我的源集移动(因为我说我的测试项目确实运行了仪器测试)但我有不知道如何解决它。如果您有任何建议(即使对我可以看到的地方有一个神秘的想法),我将不胜感激!

1 个答案:

答案 0 :(得分:4)

使用compile代替androidTestCompile修复此问题。看起来像Android中的一个错误,项目使用修改后的源集。