如何将规则应用于 AndroidJUnitRunner 中的所有测试用例?

How to apply a Rule to all test cases in a AndroidJUnitRunner?

我正在尝试将 TestWatcher 作为规则应用到我所有的测试用例 运行 由特定的 运行ner。

元数据收集器:

class MetadataCollector : TestWatcher() { ... }

测试运行者:

class TestRunner : AndroidJUnitRunner() {

  override fun onCreate(arguments: Bundle?) {
    super.onCreate(arguments)
  }

  override fun newApplication(cl: ClassLoader?, className: String?, context: Context?): Application {
    return super.newApplication(cl, TestApplication::class.java.name, context)
  }
}

我的所有测试 类 目前需要 MetadataCollector() 作为规则初始化:

测试Class:

@JvmField @Rule val collector = MetadataCollector()

有没有办法可以自动为 运行ner 的每个测试用例创建此规则的实例?理想情况下,这是为了避免在每个测试 Class.

中重复此 @Rule 创建

不幸的是,我现在受困于 JUnit 4。 :(

有一种更好的方法可以做到这一点,即在您的测试运行程序中注入一个 RunListener 实例。在您的 gradle 配置中,您需要:

defaultConfig.testInstrumentationRunner = "com.mypackage.MyTestRunnerClassName"
defaultConfig.testInstrumentationRunnerArgument("listener", "com.mypackage.MyRunListenerClassName")

并在代码中,创建一个RunListenerClassName来实现相应的hooks

class MyRunListener : RunListener() { 
   // impl
}