微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

元数据收集器:

class MetadataCollector : TestWatcher() { ... }

TestRunner:

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() 初始化为规则:

测试类:

@JvmField @Rule val collector = MetadataCollector()

有没有办法可以为运行程序的每个测试用例自动创建此规则的实例?理想情况下,这是为了避免在每个测试类中重复创建 @Rule

不幸的是,我目前坚持使用 JUnit 4。 :(

解决方法

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

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

并在代码中创建一个RunListenerClassName来实现对应的钩子

class MyRunListener : RunListener() { 
   // impl
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。