问题描述
我正在尝试将 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
}