JAVA:知道何时调用方法

时间:2012-07-27 01:20:29

标签: java reflection fitnesse acceptance-testing

在这里思考一个奇怪的问题。比如说,您在服务器上部署了代码,执行以下操作:

//GET request called when a URL is hit
public void gETCalled(){
    MyClass.invoke();
}

想知道是否有可能从外部测试类(部署在同一服务器环境中)知道是否曾经调用invoke()而不修改MyClass?

我正在尝试编写验收测试,并且想知道这是否可能(没有触及我的MyClass代码)

2 个答案:

答案 0 :(得分:3)

就测试用例而言,PowerMock可以拦截静态方法调用。

http://code.google.com/p/powermock/wiki/MockStatic

但是,从服务器端代码来看,AoP(特别是aspectj)将是您最好的选择。这样您就不必实际更改任何代码(仅代码方面类),只有当您想要将aspectj weaver添加为javaagent时才能启用它。

方面看起来像这样:

@Aspect
public class TrackMyClassInvoke {
    @Before("execution(* MyClass.invoke())")
    public void beforeInvoke() {
         // do something to track it here
    }
}

你需要确保在编织中包含MyClass(我不会进入编织的整个过程,因为你可以在aspectj网站上找到所有这些)

http://www.eclipse.org/aspectj/

答案 1 :(得分:0)

我认为您可以使用AoP来执行此操作。我自己没有使用它,但我相信它会让你创建一个日志记录机制,你可以做一些事情,比如调用方法,打印或记录一些语句。