gpt4 book ai didi

android-espresso - ./gradlew test connectedAndroidTest 删除我的 getFilesDir() 文件夹

转载 作者:行者123 更新时间:2023-12-03 14:55:41 27 4
gpt4 key购买 nike

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

当我手动运行我的应用程序时,我想写一些记录并将它们保留在数据库中,因此我不需要再次编写它们。当我运行测试时,我将数据库名称从“*.dat”切换到“_test.dat”(想想 Ruby on Rails 或 Django 的“环境”系统)。测试可以免费删除记录。

当我手动镊子 Android Studio 中的每个测试来运行它时,这个系统就起作用了。但是当我批量运行所有内容时,在 gradlew ,有些东西会删除数据库的“*.dat”版本。这意味着我必须不断地手动重新填充数据库,每次我手动测试。

里面有什么gradlew正在删除我的 getFilesDir() 文件夹的内容吗?以及如何(不知道如何使用“外部”存储),我能打败它吗?

可应要求提供代码示例,但这只是通用内容。切换到 getExternalFilesDir() 不能解决问题。 StackOverflow 说试试 ./gradlew test connectedAndroidTest -x uninstallAndroidTest ,但没有 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

有人能拿出来吗?很烦大家。

最佳答案

根据这里的获奖作品...

Run connectedAndroidTest and skip uninstall

...答案是写一个Rakefile包含:

task default: [ :unit_test_and_install, :espresso_test ]

task :unit_test_and_install do
sh './gradlew --console=verbose test installDebug installDebugAndroidTest'
end

devices = `adb devices`
serial_numbers = devices.split("\n")[1..-1].map{|q| q.split("\t")[0] }

task :espresso_test do

threads = serial_numbers.map do |sn|
Thread.new do
sh "adb -s #{sn} shell am instrument -w -r -e package com.mycorp.myapp -e disableAnalytics true " +
"com.mycorp.myapp.test/androidx.test.runner.AndroidJUnitRunner | tee #{sn}.txt"
end
end

threads.each &:join

serial_numbers.each do |sn|
grop = `grep "^OK .*tests" #{sn}.txt`

if grop == ''
sh "cat #{sn}.txt"
abort 'FAILURES on ' + sn
end
end

end

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

我们需要一个 ruby Rakefile ,不是 Makefile ,因为我们需要处理输出并查找错误以成功向环境返回 0 或 1。但是 adb etc不符合“测试错误是语法错误”的规则,并且在错误时不会传播正确的退出值。我希望我的命令行异常终止而不是提交损坏的代码,所以我们将测试输出存储到 SERIALNUMBER.txt 文件中,然后 grep他们。

而且我们需要线程,所以很多设备可以同时测试而无需互相等待。

正确检测错误允许在一行中集成, $ rake && git commit -am 'the same comment every time' && git push .如果有任何错误,它们会显示在控制台上,并且 git commit不会发生。

我们需要 Makefile -style 处理,因为如果任何命令失败,我们需要停止处理,遵循“测试错误是语法错误”的规则。

(一个新的错误是在 Espresso 测试错误时,我们不再收到消息说 HTML 输出文件在哪里,但因为错误本身在 spew 中,所以问题不大。)

另一个错误:如果我通过 USB 调试连接了两个平板电脑,我会收到 error: more than one device/emulator ,这完全是假的,因为 ./gradlew test connectedAndroidTest自然可以在所有设备上正常工作...这就是 Rakefile 的原因必须找到所有设备然后调度 adb shell -s给每一个。

请写下任何和所有关于使用低价的投诉 Rakefile调用 gradlew这里: [__]。

关于android-espresso - ./gradlew test connectedAndroidTest 删除我的 getFilesDir() 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57433975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com