我是Test中的一名軟件工程師,我試圖編寫代碼來替代生產端方法,以便測試可以執行這些方法。基本上,我不想修改可測試性的生產代碼。在運行時更改方法執行(Java)
下面是一個簡單的場景:
public class Foo {
public static void foo() {
printA();
}
public static void printA() {
System.out.println("A");
}
public static void printB() {
System.out.println("B");
}
}
public class Foobar {
public Foobar() {
}
public void test() {
Foo.foo();
}
public static void main(String[] args) {
//Try changing the method here
new Foobar().test();
}
}
正如你可以看到,當主執行時,它會因爲它調用靜態方法foo方法printA()打印「A」。現在在運行時,有沒有一種方法可以注入或修改,這樣foo將調用printB而不是printA?
謝謝你的幫助!
,可以用[儀表](http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html)來獲取對類字節的訪問,然後使用[ASM](http:// asm。 ow2.org/),[BCEL](http://commons.apache.org/bcel/)或其他字節碼分析/修改庫來修改該方法。 – Vulcan 2013-02-15 22:04:13
我設法做一次這樣的事情,一次使用[javassist](http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/) – Grim 2013-02-15 22:06:18