1

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

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

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

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

4

2 回答 2

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/

于 2012-07-27T04:31:11.753 回答
0

我认为您可以使用AoP来执行此操作。我自己没有使用过它,但我相信它可以让您创建一个日志记录机制,您可以在其中执行某些操作,例如调用方法、打印或记录某些语句。

于 2012-07-27T03:28:04.443 回答