2012-07-27 92 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做到這一點。我自己並沒有使用它,但我相信它可以讓你創建一個日誌記錄機制,可以在你調用方法,打印輸出或記錄某些語句時執行某些操作。

相關問題