2012-07-27 46 views
1

想到这里一个奇怪的问题。例如说,你已经部署在服务器上的代码,执行以下操作:JAVA:知道什么时候调用方法

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

想知道,如果它可以知道,从上是否调用外部测试类(部署在同一台服务器环境)()曾经被调用过,没有修改MyClass?

我尝试编写验收测试,并想知道如果这是以往任何时候都可能(不碰我MyClass的代码)

+1

查找到[EMMA(http://emma.sourceforge.net/)。你可能会把它扭转到你想要的,但即使不是,它使用的一些技术也应该适用。 – 2012-07-27 01:25:51

+0

Spring Insight应该直接开箱即用,如果你还没有使用他们的tomcat发行版,我不知道它是如何工作的。 – Affe 2012-07-27 01:26:52

+1

您可能会对代码覆盖工具(如EMMA或Cobertura)感兴趣。 – Thilo 2012-07-27 01:30:19

回答

3

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

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

然而,从服务器端代码,AOP(特别是AspectJ的)会是你最好的选择。这样,您不必实际更改任何代码(只编写一个方面类),只有当您想将aspectj编织器添加为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/

0

我想你可能能够使用AoP做到这一点。我自己并没有使用它,但我相信它可以让你创建一个日志记录机制,可以在你调用方法,打印输出或记录某些语句时执行某些操作。

相关问题