我在黄瓜和科特林中有一个自动化项目,有很多步骤,有时我想要运行一个步骤,并且如果它失败则不停止测试,也就是在 try 块内运行它(我称之为软步骤),我想制作一个工具,可以执行给定的任何给定步骤并在 try 块内运行它
我想要达到的目标:
减少代码重复。
添加任何新步骤无需维护,步骤更改时例外。
evrey 步骤可以正常运行或作为软步骤运行
我尝试找到一种通过代码端的步骤名称运行步骤的方法,如下所示:
When("click button")
fun clickButton() {
// click button
}
when("soft {string}")
fun softStep(step: String) {
runCatching{
When(step)
}.onFailure {
// document the failure
}
}
功能文件:
When soft "click button"
遗憾的是,函数 When() 不按给定字符串运行步骤
有一个函数可以做到这一点吗? 如果不是我该如何制作一个? 或者有不同的方法来实现我想要的相同目标?
我不想做的想法: -每一步都有一个在try内部调用他的in函数的步骤(函数数量的两倍) -一个带有when块的函数来查找步骤(这将是一个巨大的函数,必须处理调用所有步骤并更改我们添加步骤或更改步骤名称的时间)
随时问我, 感谢您的帮助。
如果您想修改/扩展步骤逻辑而不重复代码和大规模重构(到处添加 try/catch),那么我可以建议您查看面向方面编程(AOP)。
我已经在 AspectJ 的帮助下成功解决了与您相同的问题,但它是一个基于 Java 的项目。
我相信您应该能够对基于 Kotlin 的项目执行相同的操作。
简而言之,AOP 允许您创建一个方法执行“拦截器”(在您的情况下为步骤),它将包含基于某些条件的 try/catch 块,以防您需要它是可选的(例如通过控制逻辑)一些系统属性)。 然后,您可以将该方法应用于包或类中的所有步骤,或者使其基于注释(例如,仅应用于使用某些注释进行注释的那些步骤)。