如何将规则应用于 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
}
我正在尝试将 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
}