0

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

这是一个简单的场景:

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?

谢谢大家的帮助!

4

3 回答 3

1

看看AspectJ

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

于 2013-02-15T22:04:05.150 回答
0

如果您只是为了测试类而这样做,则可以使用模拟框架来模拟服务器上的类。我喜欢Mockito

于 2013-02-15T22:03:11.763 回答
0

您可以使用 java 反射 api 自己完成,也可以使用PowerMock之类的工具。

于 2013-02-15T22:03:24.363 回答