./ gradlew测试已连接AndroidTest会删除我的getFilesDir()文件夹

问题描述 投票:6回答:1

我正在将Room数据库写入我的getFilesDir()文件夹。 (将数据库写到可移动SD卡上显然需要进行一些[[major研究!)

[当我手动运行我的应用程序时,我想写一些记录并将其保留在数据库中,因此无需再次写它们。运行测试时,我将数据库名称从“ * .dat”切换为“ _test.dat”(以Ruby on Rails或Django的“ environments”系统为例)。测试可以自由删除记录。

当我手动用镊子钳Android Studio中的每个测试以运行它时,此系统就可以工作。但是,当我批量运行所有内容时,在gradlew中,某些操作会擦除数据库的“ * .dat”版本。这意味着每次我手动测试时,我都必须不断手动重新填充数据库。

gradlew里面的什么正在擦除getFilesDir()文件夹的内容?以及如何(不弄清楚如何使用“外部”存储),我会击败它吗?

代码示例可应要求提供,但这全都是通用的东西。切换到getExternalFilesDir()不能解决问题。说要尝试./gradlew test connectedAndroidTest -x uninstallAndroidTest的StackOverflow,但没有uninstallAndroidTest任务。


顶级build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.5.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } tasks.withType(Test) { testLogging { exceptionFormat "full" events "started", "skipped", "passed", "failed" showStandardStreams true } }

app/build.gradle

apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.allflat.planarinfinity" minSdkVersion 26 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } // packagingOptions { // exclude 'META-INF/DEPENDENCIES' // exclude 'META-INF/LICENSE' // exclude 'META-INF/LICENSE.txt' // exclude 'META-INF/license.txt' // exclude 'META-INF/NOTICE' // exclude 'META-INF/NOTICE.txt' // exclude 'META-INF/notice.txt' // exclude 'META-INF/ASL2.0' // exclude 'META-INF/INDEX.LIST' // } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.0.0' testImplementation 'junit:junit:4.12' // testImplementation 'org.mockito:mockito-core:2.19.0' testImplementation 'androidx.arch.core:core-testing:2.1.0' androidTestImplementation 'org.powermock:powermock-core:2.0.2' androidTestImplementation 'org.powermock:powermock-module-junit4:2.0.2' androidTestImplementation 'org.powermock:powermock-api-easymock:2.0.2' androidTestImplementation 'androidx.test:core:1.2.0' androidTestImplementation 'androidx.test.ext:junit:1.1.2-alpha02' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0-alpha02' androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.2.0' androidTestImplementation 'androidx.test:rules:1.2.0' // androidTestImplementation 'androidx.test.platform.app:' implementation 'androidx.room:room-runtime:2.2.0' annotationProcessor 'androidx.room:room-compiler:2.2.0' testImplementation 'androidx.test:core:1.2.0' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test:rules:1.0.2' androidTestImplementation 'org.easymock:easymock:4.0.2' // androidTestImplementation 'org.mockito:mockito-core:2.19.0' }


这是这里的“卸载”:

https://android.googlesource.com/platform/tools/base/+/8d969614b7beca74e4d17f2d1c5956e75053f7ce/build-system/builder/src/main/java/com/android/builder/internal/testing/SimpleTestCallable.java

有人可以拿出来吗?真是令人讨厌。

android-espresso android-testing gradlew
1个回答
0
投票
根据此处的获奖作品...

Run connectedAndroidTest and skip uninstall

...答案是写一个包含以下内容的Makefile

all: unit_test_and_install espresso_test unit_test_and_install: ./gradlew --console=verbose test installDebug installDebugAndroidTest espresso_test: adb shell am instrument -w -r -e package com.mycorp.myapp -e disableAnalytics true com.mycorp.myapp.test/androidx.test.runner.AndroidJUnitRunner

然后只需输入$ make。所有测试都在运行,而我的手动测试数据和配置都可以保留。

我们需要Makefile,而不是Bash脚本,因为如果./gradlew test失败,则该批处理应停止并显示错误消息,并遵循“测试错误是语法错误”的规则。并注意选项卡。

一个新的错误是在Espresso测试故障时,我们不再收到显示HTML输出文件在哪里的消息,而是因为错误本身在喷出中,所以这不再是问题。

[请在此处写下有关使用低级Makefile呼叫gradlew的所有投诉:[__]。

© www.soinside.com 2019 - 2024. All rights reserved.