Cucumber 我想要一个在 try 块中运行给定步骤的步骤

问题描述 投票:0回答:1

我在黄瓜和科特林中有一个自动化项目,有很多步骤,有时我想要运行一个步骤,并且如果它失败则不停止测试,也就是在 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块的函数来查找步骤(这将是一个巨大的函数,必须处理调用所有步骤并更改我们添加步骤或更改步骤名称的时间)

随时问我, 感谢您的帮助。

cucumber
1个回答
0
投票

如果您想修改/扩展步骤逻辑而不重复代码和大规模重构(到处添加 try/catch),那么我可以建议您查看面向方面编程(AOP)。

我已经在 AspectJ 的帮助下成功解决了与您相同的问题,但它是一个基于 Java 的项目。

我相信您应该能够对基于 Kotlin 的项目执行相同的操作。

简而言之,AOP 允许您创建一个方法执行“拦截器”(在您的情况下为步骤),它将包含基于某些条件的 try/catch 块,以防您需要它是可选的(例如通过控制逻辑)一些系统属性)。 然后,您可以将该方法应用于包或类中的所有步骤,或者使其基于注释(例如,仅应用于使用某些注释进行注释的那些步骤)。

© www.soinside.com 2019 - 2024. All rights reserved.