我正在将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' }
这是这里的“卸载”:有人可以拿出来吗?真是令人讨厌。
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
的所有投诉:[__]。