在运行时更改方法执行(Java)

时间:2013-02-15 22:00:35

标签: java

我是Test的软件工程师,我正在尝试编写可以替换生产方法的代码,以便测试可以执行。基本上,我不想修改生产代码的可测试性。

这是一个简单的场景:

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();
    }

}

正如您所看到的,当main执行时,它将打印“A”,因为它在静态方法foo()上调用方法printA。现在运行时,有没有一种方法可以注入或修改foo将调用printB而不是printA?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

看看AspectJ

它提供advices,可以用来执行一些代码围绕一个方法(在执行之前和之后),包括完全绕过对原始方法的调用并返回一些arbirary值

答案 1 :(得分:0)

如果您只是为测试类而执行此操作,则可以使用模拟框架来模拟服务器上的类。我喜欢Mockito

答案 2 :(得分:0)

您可以使用java reflection api自行完成,也可以使用PowerMock之类的工具。