@Around(value = "setAuditSpan(auditLog)")
  public Object around(ProceedingJoinPoint pjp, ApolloAuditLog auditLog) throws Throwable {
    String opName = auditLog.name();
    try (AutoCloseable scope = api.appendAuditLog(auditLog.type(), opName,
        auditLog.description())) {
      Object proceed = pjp.proceed();
      auditDataInfluenceArg(pjp);
      return proceed;
    }
  }
@Test
  public void testAround() throws Throwable {
    final OpType opType = OpType.CREATE;
    final String opName = "App.create";
    final String description = "no description";

    ProceedingJoinPoint mockPJP = mock(ProceedingJoinPoint.class);
    ApolloAuditLog mockAnnotation = mock(ApolloAuditLog.class);
    AutoCloseable mockScope = mock(AutoCloseable.class);
    {
      when(mockAnnotation.type()).thenReturn(opType);
      when(mockAnnotation.name()).thenReturn(opName);
      when(mockAnnotation.description()).thenReturn(description);
      when(api.appendAuditLog(eq(opType), eq(opName), eq(description)))
          .thenReturn(mockScope);
      doNothing().when(aspect).auditDataInfluenceArg(mockPJP);
    }

    aspect.around(mockPJP, mockAnnotation);
    verify(api, times(1))
        .appendAuditLog(eq(opType), eq(opName), eq(description));
    verify(mockScope, times(1))
        .close();
    verify(aspect, times(1))
        .auditDataInfluenceArg(eq(mockPJP));
  }