使用AspectJ获取实现方法的类名



我有一个类的方法有annotation(io.qase.api.annotation.Step(

Class myStepsClass() {
@Step
fun stepOne() {***}
@Step
fun stepTwo() {***}
}

我想打印";步骤";方法名称,并显示实现步骤方法的类名:在本例中,这是myStepsClass。

我创建了方面文件

@Aspect
class Aspects {
@Before("@annotation(io.qase.api.annotation.Step)")
fun stepMethod(joinPoint: JoinPoint) {
println("Step called: ${getMethodName(joinPoint)}")
}
private fun getMethodName(joinPoint: JoinPoint): String {
val methodSignature = joinPoint.signature as MethodSignature
return methodSignature.name
}
}

它打印调用的步骤:stepOne当我调用步骤";stepOne";其他方法中的方法(如测试方法(。如何获取父类名称-myStepsClass?

打印类似的内容

调用的步骤:myStepsClass->步骤一

调用的步骤:myStepsClass->步骤二

我创建了一个项目,代码为:https://github.com/heavy-razzer/AssertJ-Maven-Kotlin

(joinPoint.signature as MethodSignature).declaringTypeName将发挥作用。它将返回该方法的完整路径,由"分割"象征

所以你可以有

private fun getParentClassName(joinPoint: JoinPoint): String {
return (joinPoint.signature as MethodSignature).declaringTypeName.split(".").last()
}

以获取类的名称,其中描述了该方法。

我已经用这个例子更新了我的GH回购。

输出为:

Test started: Very simple test
Steps->printCaption(): []
Step: This this a simple test
Test step performed: printCaption
Steps->printMessage(): []
Step: Testing in progress 
Test step performed: printMessage

相关内容

  • 没有找到相关文章

最新更新