use*_*395 1 java android android-studio android-espresso
大约一个星期前,我问过这个问题
为什么库模块android.support.test在添加依赖项中不可见
经过多次头部刮擦和项目设置变形后,我发现这个app/build.gradle依赖配置让我比以前更进一步,因为至少项目编译但是在尝试运行时没有构建:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion '22.0.1'
defaultConfig {
applicationId "com.my.package.name"
minSdkVersion 8
targetSdkVersion 22
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
sourceSets { main { java.srcDirs = ['src/main/java', 'src/androidTest/java'] } }
packagingOptions {
exclude 'LICENSE.txt'
}
}
dependencies {
compile 'com.android.support:appcompat-v7:22.1.0'
compile 'com.android.support:support-v4:22.1.0'
compile 'com.android.support.test.espresso:espresso-core:2.1'
compile 'com.android.support.test:testing-support-lib:0.1'
}
Run Code Online (Sandbox Code Playgroud)
请注意,compile而不是androidTestCompile测试支持依赖项.使用androidTestCompile上述问题中提到的问题的结果.
另请注意sourceSets声明中的两个srcDirs.当我手动创建androidTest/java目录时,该声明自动设置.这应该以不同的方式宣布吗
同样,getDefaultProguardFile在ide中用工具提示"无法解析符号'getDefaultProguardFile'"加下划线.如果这是至关重要的.
这种新的启示,切换androidTestCompile到compile,让我相信有什么毛病我成立了项目结构的单元测试的方式.这是我的项目结构图:
我应该提一下,从Eclipse迁移时会自动创建这个项目/模块结构.通过图标装饰,它看起来至少将我的测试类识别为测试类.
但现在我陷入了这个错误:
错误:任务':mymodule:dexDebug'的执行失败.com.android.ide.common.internal.LoggedErrorException:无法运行命令:C:\ Users\myuser\AppData\Local\Android\sdk\build-tools\22.0.1\dx.bat --dex --no- optimize --output C:\ Users\myuser\AndroidstudioProjects\myproject\mymodule\build\intermediates\dex\debug --input-list = C:\ Users\myuser\AndroidstudioProjects\myproject\mymodule\build\intermediates\tmp\dex\debug\inputList.txt错误代码:2输出:UNEXPECTED TOP-LEVEL EXCEPTION:com.android.dex.DexException:多个dex文件定义Landroid/support/test/BuildConfig; 在com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)在com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)在com.android.dx.merge.DexMerger.mergeClassDefs (DexMerger.java:535)在com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)在com.android.dx.merge.DexMerger.merge(DexMerger.java:189)在com.android. dx.command.dexer.Main.mergeLibraryDexBuffers在com.android.dx.command.dexer.Main(Main.java:454)在com.android.dx.command.dexer.Main.runMonoDex(Main.java:303).在com.android.dx.command.Main.main(Main.java:106)的com.android.dx.command.dexer.Main.main(Main.java:215)运行(Main.java:246)
不确定这是来自我的项目设置还是来自库,因为在support.test库上使用了编译.
任何关于为什么androidTestCompile不起作用的建议都表示赞赏.
另外,我在2天前从SDK Manager到22.0.1的所有最新更新都无济于事.
我注意到的另一件事是我似乎发现包含com.google.common包的唯一jar.*在espresso库中.(com.google.common.*是测试库的依赖项.)但是当我使用winzip检查espresso库jar时,所有com.google.common.*包文件夹结构都存在,但是没有.class文件包文件夹或子文件夹.只是提一下,以防它提供线索.也许它也是我错过的其他地方.
谢谢!
编辑:
我的源码集现在看起来像这样
sourceSets {
main {
java.srcDirs = ['src/main/java']
}
}
Run Code Online (Sandbox Code Playgroud)
和依赖
dependencies {
compile 'com.android.support:appcompat-v7:22.1.0'
compile 'com.android.support:support-v4:22.1.0'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.1'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
}
Run Code Online (Sandbox Code Playgroud)
我仍然无法android.support.test在我的测试类中解析(test在这些行上显示为红色):
import android.support.test.InstrumentationRegistry;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
Run Code Online (Sandbox Code Playgroud)
我不应该在外部库中看到测试支持,espresso-core和espresso-contrib?

以下是我基于Android Studio 1.1.0 + Espresso 2.0 +支持库v11 + gradle环境的Espresso gradle设置.您可能错过了androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'图书馆.
dependencies {
// ...
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
}
android {
defaultConfig {
minSdkVersion 10
targetSdkVersion 21
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
sourceSets {
packagingOptions {
//...
exclude 'META-INF/LICENSE.txt'
exclude 'LICENSE.txt'
}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src/main/java']
res.srcDirs = ['res']
}
}
}
Run Code Online (Sandbox Code Playgroud)
关于目录,是的.只需维护androidTest并main在src文件夹下.但是,您的设置不会使IDE将androidTest文件夹识别为测试项目文件夹.为此,我认为具有相同包名的两个项目会导致多dex错误.androidTestCompile在gradle依赖项和清理/重建项目中使用与espresso相关的行.
请注意,您必须将所有引用的项目gradle设置为相同的testInstrumentationRunner.
我也花了很多时间让它发挥作用.我写了韩语教程来设置和运行Espresso.对于该语言很抱歉,但屏幕截图可能会有所帮助,或者您可以尝试使用Google翻译来阅读它.
编辑.附录如下
我想为什么你的IDE没有在androidTest文件夹中显示绿色(意味着测试项目),并发现你的gradle设置似乎是错误的.
该
{ main { java.srcDirs = ['src/main/java', 'src/androidTest/java'] } }行使IDE识别androidTest是一个Project文件夹而不是Test Project文件夹.删除第二个.androidTest将自动识别为测试项目.
| 归档时间: |
|
| 查看次数: |
7603 次 |
| 最近记录: |