我没有发现任何关于Stack Overflow的帖子有帮助,所以我发布了我自己的问题。
我有一个自定义的testInstrumentationRunner
,当设置不运行任何测试时。日志显示:
App restart successful without requiring a re-install.
Running tests
adb shell am instrument -w -m --no-window-animation -e debug false -e class 'com.my.app.MyFragmentTest' com.my.app.debug.test/com.my.app.CustomTestRunner
Connected to process on device
当运行正常的androidx.test.runner.AndroidJUnitRunner
时,测试运行,但失败,因为我需要自定义运行器。
运行器设置与androidx类似,在:
defaultConfig {
// testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner
testInstrumentationRunner "com.my.app.CustomTestRunner"
}
它也位于androidTest
文件夹下的com.my.app
包中
运行程序的代码是:
package com.my.app
import ...
class CustomTestRunner: AndroidJUnitRunner() {
override fun newApplication(cl: ClassLoader?, className: String?, context: Context?): Application {
DexOpener.install(this)
Timber.i("This should print hopefully")
return super.newApplication(cl, ApplicationTest::class.java.canonicalName, context)
}
}
不确定这是否重要,但下面是应用程序类的代码,它扩展了应用程序本身使用的应用程序类:
package com.my.app
class ApplicationTest: MyApplication() {
override fun onCreate() {
super.onCreate()
appContext = applicationContext
initializeDependencyInjection()
}
override fun initializeDependencyInjection() {}
}
我有一个测试用例,我试图运行,它包含7个测试。androidx运行器在7/7测试中失败。但是当我使用自定义运行器运行时,我得到duration 0ms
和0/0测试。
所以Android似乎没有检测到这个跑步者。我还在testInstrumentationRunner中使用随机名称获得相同的结果,如testInstrumentationRunner "not.a.TestRunner"
我相信你已经解决了这个问题,或者把工作换成了种植土豆或其他更有成效的工作,但我刚刚花了整个上午的时间调试这个完全相同的场景,并设法找到了一个解决方案:
您拥有的自定义检测运行程序不会被忽略,但是在您的自定义测试应用程序初始化中存在一些问题。可能在你的替代药物依赖注射中,就像我的情况一样。使用自定义运行器运行测试时,自定义测试应用程序会立即静默崩溃,但这不会在测试结果或任何其他容易看到的地方显示出来。崩溃堆栈跟踪,然而,logcat中访问。所以先解决这个问题,然后再尝试使用您的自定义测试运行器。
当测试一个库模块时,您可以在src/androidTest/AndroidManifest.xml
中链接测试应用程序:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:name="com.my.app.ApplicationTest"/>
</manifest>
不要混合使用工具测试和单元测试:
单元测试
单元测试在本地JVM中运行并最小化执行时间。单元测试不能在不模拟活动对象的情况下测试应用程序的UI。单元测试用于测试代码的白盒测试。大多数情况下,单元测试是由开发人员编写的。您不需要连接设备来执行单元测试。
<<p>仪器测试/strong>仪器测试用于黑盒测试。它用于在实际环境中测试应用程序的GUI及其功能。要执行Instrumentation测试,您需要一个设备/模拟器,首先在其上安装应用程序,然后执行测试。自动化测试人员参与编写仪表框架。