Articles of android testing

当我添加片段自定义转换时,unit testingNPE

当我添加自定义转换时,OnBackPressed()测试会抛出NPE。 没有自定义过渡就没问题。 为什么? 这个NPE只能在unit testing中发生,而不是应用程序。 class MyActivity { @Override public void onBackPressed() { ……. super.onBackPressed(); } private void putFragment(Fragment fragment) { String tag = fragment.getClass().getName(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // TEST FAILED IF I ADD THE FOLLOWING LINE transaction.setCustomAnimations( R.anim.slide_in_left_fade_in, R.anim.fade_out_short_anim_time, R.anim.fade_in_short_anim_time, R.anim.slide_out_right_fade_out); transaction.replace(R.id.ub__add_profiles_content, fragment, tag); transaction.addToBackStack(tag); transaction.commit(); } } class MyActivityTest extends RiderRobolectricBase { […]

如何在attach()中更改活动标题

我想运行一个参数化的Instrumentation Test,它具有不同的语言环境,可以使用所有支持的语言运行相同的测试。 观察到的行为是,对于每次后续运行,活动都将具有第一次测试运行的本地化标题 。 因此,无论我的手机使用哪种语言,标题都将针对第一个参数化测试运行进行正确本地化,并且对于后续每个测试运行仍然是相同的。 虽然覆盖语言环境本身适用于任何资源,但如果由AndroidManifest.xml设置,它将仅对 活动标题 起作用一次 。 活动似乎在attach设置了一次标题,而无论调用attach,似乎都是在应用程序首次启动的语言环境中缓存标题。 final void attach(Context context, ActivityThread aThread, Instrumentation instr, IBinder token, int ident, Application application, Intent intent, ActivityInfo info, —> CharSequence title, Activity parent, String id, NonConfigurationInstances lastNonConfigurationInstances, Configuration config, String referrer, IVoiceInteractor voiceInteractor) { attachBaseContext(context); 由于资源总是被正确本地化,解决方法是调用setTitle(R.string.title)或只调用getActionBar().setTitle(R.string.setTitle) ,但我不想仅仅为了测试目的而更改活动。 问题:如何在第一次测试运行后更改活动的标题? 如上所述,这似乎被缓存并且未正确更新,并且杀死应用程序以重新启动它将无法进行检测测试。 测试设置 整个测试项目可以在GitHub上find ( Localization.java包含当前失败的unit testing和此处描述的问题),并且正在使用参数化unit testing和UIAutomator […]

对于Lollipop及以上的仪器测试,“没有测试结果”

我的基于仪器的(espresso)测试不能在Lollipop +设备和模拟器上运行。 它们可以在任何其他平台上正常运行 我和这个post中的人有相同的症状 – https://groups.google.com/forum/?fromgroups#!topic/adt-dev/QW5SuzQizNk 我的测试是在src / androidTest / java / 我已经设置了testInstrumentationRunner’android.support.test.runner.AndroidJUnitRunner’ 测试类是@RunWith(AndroidJUnit4.class) 个人测试用@Test注释 我可以执行./gradlew connectedCheck并且测试在使用KitKat的设备上运行良好,但是当我尝试在具有Lollipop的设备上以相同的方式运行相同的测试时,我得到… 15:02:15.784 [WARN] [org.gradle.api.Task] XT1095上的测试 – 5.1失败: 由于’java.lang.NoClassDefFoundError’导致仪表运行失败 15:02:16.011 [WARN] [org.gradle.api.Task] com.android.builder.testing.ConnectedDevice>未find测试。[XT1095 – 5.1] FAILED 15:02:16.011 [警告] [org.gradle.api.Task]未find测试。 这通常意味着您的测试类不是您的测试运行器期望的forms(例如,不从TestCaseinheritance或缺少@Test注释)。

使用AndroidJUnitRunner 1.0.0和AssertJ检测测试失败

我正在尝试将我的项目更新到最近发布的Android测试支持库版本1.0.0 。 但是,如果我添加assertj-core依赖,Gradle检测的测试任务开始失败并显示“No tests found”消息。 我可以成功地从IDE运行个别测试。 很容易重现这个问题: 从Android Studio 3创建具有空活动的新项目。 添加assertj-core依赖。 从命令行运行检测测试./gradlew connectedDebugAndroidTest 。 Gradle脚本。 android { defaultConfig { testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } } dependencies { implementation ‘com.android.support:appcompat-v7:26.0.0’ implementation ‘com.android.support.constraint:constraint-layout:1.0.2’ testImplementation ‘junit:junit:4.12’ androidTestImplementation ‘com.android.support.test:runner:1.0.0’ androidTestImplementation group: “org.assertj”, name: “assertj-core”, version: “2.8.0” } 控制台输出。 com.android.builder.testing.ConnectedDevice > No tests found. [Nexus_4_API_25(AVD) – 7.1.1] FAILED No tests found. This […]

如何在各种设备上测试android企业应用程序

我正在研究一个大型企业Android应用程序,我们想知道其他公司如何测试他们的应用程序。 我们有大约10种设备,我们建议客户使用,因为不可能有各种设备和测试应用程序。 我听说Eset和Sygic也有一些主要支持的设备,他们的应用程序已经过测试,如果出现某些设备特定的错误,他们就会得到该设备。 我做了一些研究,发现了一些自动化测试工具(如TestDroid)。 有没有人对TestDroid等自动化测试工具有实际经验? 如果有一个大公司工作的人可以分享测试程序,工具,提示或建议如何测试企业Android应用程序,当存在如此多的具有各种操作系统版本,分辨率和系统扩展的设备(如HTC Sense,三星),这将是非常棒的的TouchWiz)。 非常感谢你们。

在Android App SDLC中测试组件?

“自动化测试是开发生命周期中不可或缺的一部分。” 在android app proejcts中,我们使用Retrofit和Content Provider / SQLite,dagger实现了MVP,Rx。 每个Android应用程序将始终具有服务器通信,将数据存储在本地数据库中,复杂的ui如naviagtion抽屉和回收器视图等,以及应用程序的难以导航流程。 我们想要实现什么? 在我们将apk发送给客户端或在Play商店发布之前,每次都应该测试几个测试用例?(20-30%自动化测试) 业务逻辑的测试用例列表,由于复杂的ui,导航流等原因无法自动测试(40-60%手动测试) 持续集成 基于上述,问题很少, 在汽车和手动测试什么,如何决定? 在自动化测试中,在MVP – Model-View-Presenter层中进行测试的位置? 什么样的通用业务逻辑应该自动测试移动应用程序 – 如注册,登录,忘记密码,更新配置文件等? 什么types的测试应该为Android应用程序执行 – unit testing,function测试,集成测试,手动测试,性能测试,回归测试 使用哪个工具 – android测试支持库,espresso,uiautomator,Robotium,roboelectric,appium,selendroid,mockito,JUnit (随意改进检查清单,因为我们不知道在Android移动应用程序的SDLC中测试模块的最佳实践。)最初在这里问。

如何从测试覆盖范围中排除Dagger2类

是否有任何选项可以从Android Studio中的测试覆盖率报告中排除Dagger2类

java.lang.SecurityException:权限拒绝:在测试中使用UiAutomation时的getIntentSender()

每当我尝试通过getInstrumentation().getUiAutomation()在任何测试中使用UiAutomation时,进程都会因此exception而崩溃: java.lang.SecurityException: Permission Denial: getIntentSender() from pid=30334, uid=2000, (need uid=1000) is not allowed to send as package android at android.os.Parcel.readException(Parcel.java:1540) at android.os.Parcel.readException(Parcel.java:1493) at android.app.IUiAutomationConnection$Stub$Proxy.disconnect(IUiAutomationConnection.java:225) at android.app.UiAutomation.disconnect(UiAutomation.java:240) at android.app.Instrumentation.finish(Instrumentation.java:197) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:575) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837) 知道为什么吗? 我正在通过Android Studio使用Gradle,尝试了各种版本,直接通过adb调用它,即使没有任何外部依赖(显然至少有SDK 18)…总是崩溃。 这是我发现的唯一官方示例: https : //www.youtube.com/watch?v =_SlBHUW0ybM

如何自动化android的升级测试

我们一直在使用espresso进行Android自动化,其中包括升级测试 对于升级测试,我们需要执行3个步骤: 在旧版本中执行一些操作以准备一些数据 升级到新版本(封面安装) 检查旧版本中保存的数据是否已正确保留,升级后无其他问题。 目前我们正以非常笨拙的方式做到这一点: #Before: prepare data on old version adb -s $DEVICE shell am instrument -e class com.example.test.upgrade.UpgradeTest#prepareDataIn${version} -w com.example.test/com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner; #install new version adb -s $DEVICE install -r new_version.apk; #After: test after upgrading adb -s $DEVICE shell am instrument -e class com.example.test.upgrade.UpgradeTest#testUpgradeFrom${version} -w com.example.test/com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner; 我们将升级测试从某个版本分解为2个部分之前/之后,因为我们不知道我们是否能够(以及如何)在测试中安装新版本。 但是,这个adb命令的3步测试看起来很愚蠢,我们无法轻易获得junit报告。 那么有谁知道一个更好的方法来进行Android升级测试,或者你能指出我们做错了什么? 它不仅限于Espresso,如果您正在使用其他框架,您如何使用它进行升级测试? 提前致谢。

如何测试Galaxy S8的android.max_aspect

根据这个https://android-developers.googleblog.com/2017/03/update-your-app-to-take-advantage-of.html 我需要设置max_aspect。 模拟器仍然没有S8设备,所以我在硬件配置文件中设置了5.8“,分辨率为2960 x 1440。我的应用程序看起来没问题,没有设置maz_aspect,它填充屏幕没有黑线,如谷歌文章所示。 如何测试新的2.1配给量?