2013-11-02 23 views
2

假設我想爲方法或類編寫單元測試,以確保該方法的源代碼不調用某個Java API方法(在這種情況下,Arrays.sort)。這甚至有可能嗎?我希望這樣做的原因是因爲我想提出自動測試來檢測Arrays.sort是否從特定類的特定方法內的任何地方被調用,在這種情況下,我想要通過相關測試。不幸的是,基於文本的方法純粹是不令人滿意的,因爲它也會從源代碼註釋中捕獲對Arrays.sort的潛在引用。任何幫助讚賞。從源代碼中檢測對Java API方法的調用

+0

這當然是可能的,雖然可能不容易。您可能能夠鉤入Eclipse編譯器並觀察其AST或其他數據結構。 – chrylis

+0

可能的 - 我可能會使用Javassist遍歷該類的字節碼並查找調用該方法的任何指令 - 但爲什麼?!? – pobrelkey

回答

0

您可以通過創建排序界面和使用Arrays.sort

public interface SortUtil {} 

public class SortUtilImpl implements SortUtil { 
    public void sort(Collection c) { 
    Arrays.sort(c); 
    } 
} 

現在你必須使用界面在「客戶」類分選的實現做。對於單元測試,用測試模擬替換實際的實現。像:

public SortUtilMock implements SortUtil { 
    public void sort(Collection c) { 
    StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); 
    //... here you check if the sort is called by a forbidden method 
    } 
} 

最好的問候, Zied