如何组合不同的testInstrumentationRunner

Stu*_*DTO 5 testing android kotlin android-espresso

有没有办法让每个测试都有不同的 testInstrumentationRunner ?我必须Task为它创建一个吗?我的跑步者如下:

class MyTestRunner : AndroidJUnitRunner() {
    override fun newApplication(
        cl: ClassLoader?,
        className: String?,
        context: Context?
    ): Application {
        return super.newApplication(cl, MyTestApp::class.java.name, context)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如果我想使用真实的应用程序运行一些怎么办?我该如何选择它?

我一直在阅读,在我正在使用它的测试中可以这样做, @RunWith(AndroidJUnit4ClassRunner::class)但我知道如果我这样做,它需要 defaultConfig 之一

defaultConfig {
        testInstrumentationRunner("mypackage.MyTestRunner")
}
Run Code Online (Sandbox Code Playgroud)

但我不能使用它所说的东西Required:KClass<out Runner!>

@RunWith(MyTestRunner::class)
Run Code Online (Sandbox Code Playgroud)

如果我能做到这一点,我就会明白如何使用不同的跑步者。

Mar*_*ler 0

尝试扩展androidx.test.ext.junit.runners.AndroidJUnit4

import androidx.test.ext.junit.runners.AndroidJUnit4

class MyTestRunner : AndroidJUnit4() {
    ...
}
Run Code Online (Sandbox Code Playgroud)

使用的依赖:

// https://mvnrepository.com/artifact/androidx.test.ext
androidTestImplementation "androidx.test.ext:junit:1.1.2"
Run Code Online (Sandbox Code Playgroud)

文档建议将其作为默认运行器,因此应提供 Kotlin 互操作性。仅被文件中的注释KClass<out Runner!>接受。@RunWith.kt

  • 这是行不通的。AndroidJunit4 是最终版本,无法扩展。 (4认同)