【问题标题】:Tweak to run @AfterMethod before onTestSuccess/onTestFailure调整以在 onTestSuccess/onTestFailure 之前运行 @AfterMethod
【发布时间】:2017-08-20 20:46:29
【问题描述】:

我想知道是否有某种方法可以调整 TestNG,以便首先执行由 @AfterMethod 注释的方法,然后在测试侦听器中运行 onTestSuccess/onTestFailure 方法。

在我的项目中,@AfterMethod 注解的方法具有打印每个测试方法的响应正文的逻辑。并且 onTestSuccess/onTestFailure 方法具有打印消息的逻辑(例如“测试完成”)。我不想将打印此消息的代码放在我项目中每个测试类的@AfterMethod 中。

问题是,首先显示“测试完成”消息,然后打印响应正文,根据 TestNG 设计,这可能是正确的,但这是我想要调整的。

【问题讨论】:

标签: java testng


【解决方案1】:

当前实现首先运行侦听器,然后运行 ​​before/after 方法。

目前,您无法更改侦听器的顺序,并且 before/after 方法不是侦听器。

【讨论】:

  • @nullpointer 是的,同样的问题。但答案在新/当前版本中无法使用,因为未指定此类用法。
  • 同意。希望您回答这个问题并将其重定向到它。 :)
  • @juherr 我可以知道最新的TestNG版本中是否发生了一些变化,这将使我能够实现这一目标吗? :)
  • @AkshayMaldhure 你应该在github.com/cbeust/testng/issues上打开一个新的功能请求
【解决方案2】:

如果阻止在@AfterMethod 末尾添加自定义消息的主要问题只是您想要避免的全局重构,我会考虑 AOP 技术。这是一个 AspectJ 示例:

@Slf4j
@Aspect
public class MessageAspect {

    @After("execution(@org.testng.annotations.AfterMethod * target.package.path..*.*(..))")
    public void print(final JoinPoint joinPoint) {
        log.info("Test completed");
    }
}

在您的案例中使用 AOP 的主要优点是 0 重构的工作量最小。

【讨论】:

  • 您能否详细说明一下有关 TestNG 的内容?
  • @AkshayMaldhure 不确定我是否收到您的问题。使用 AspectJ 库,您可以拦截任何方法调用。包括那些用@AfterMethod注释的。因此,您甚至不需要为此类琐碎的日志记录任务创建 onTestSuccess / onTestFailure 事件侦听器。添加 10 行 AOP 代码比向 TestNG 社区请求重新排序功能要容易得多。
猜你喜欢
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多