我们的项目使用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文件,我怀疑它有某些东西与我的源集移动(因为我说我的测试项目确实运行了仪器测试)但我有不知道如何解决它。如果您有任何建议(即使对我可以看到的地方有一个神秘的想法),我将不胜感激!
答案 0 :(得分:4)
使用compile
代替androidTestCompile
修复此问题。看起来像Android中的一个错误,项目使用修改后的源集。