假設我正在測試一個類,在該類中我想向方法的某些部分添加一些指令。例如,我們考慮一下這樣一種情況,我希望開發訪問者V
以將方法C.m()
中存在的方法調用指令從C.n()
更改爲C.n_detour()
。使用ASM進行測試Bytecode
運行V
超過C
後,最簡單的測試方法是什麼?我在這裏談論xUnit風格測試。
起初,我以爲我可以在C
運行TraceMethodVisitor
,並將它與我自己的字符串,但事實證明是有很多的在很大程度上是「裝飾」的指令(如行號等)與我的測試無關(請參閱Formatting the output of a TraceClassVisitor)。
理論上我知道我可以讓一些訪問者運行並檢查C.n_detour()
的存在和C.n()
的不存在,但我寧願使用更多的東西(比較指令每條指令)。
我看了一下ASM的Tree API,但看起來並沒有那麼好,因爲那些decoration
指令也出現在那裏。
有沒有人有過去使用ASM測試代碼的經驗?
這看起來確實是個好主意。 –
我知道爲什麼我沒有想到過。問題是,目前沒有簡單的方法讓整個班級都能正常工作。試圖運行.class文件會產生錯誤。我從(仍然)不存在的類調用方法! –
然後按照我的第二條建議:創建一個項目,創建一個JAR,並將所有已檢測的類作爲輸出。使用測試過的JAR創建另一個項目。在同一個項目中做這兩件事是可能的,但很笨拙。 –