Я инженер-программист в тесте, и я пытаюсь написать код, который может заменить метод производственной стороны, чтобы тест мог их выполнять. В принципе, я не хочу изменять производственный код для проверки.Выполнение изменения метода во время выполнения (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();
}
}
Как вы можете видеть, когда основные исполняет, он будет печатать «A», так как он вызывает метод Printa на статический метод Foo(). Теперь во время выполнения есть способ, которым я могу впрыснуть или изменить такое, что 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
Мне удалось сделать что-то подобное с помощью javassist (http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/) – Grim