如何注入方法的返回值?

时间:2011-11-26 14:01:52

标签: java reflection

我甚至不确定这是否可行,但由于这个问题,我提出了这个想法:Change private static final field using Java reflection

所以这就是场景:

public static String test() {
  return "test test test";
}

我想要做的是让test()方法返回“working”而不是“test test test”。 有人知道如何做到这一点吗?

编辑:
我下载了powermock并尝试了这个:

package test;

import org.powermock.api.easymock.PowerMock;

public class InjectorTest {

public static void main(final String[] args) {
    System.out.println("Before the injection:");
    System.out.println(test());

    PowerMock.mockStatic(InjectorTest.class);
    PowerMock.doReturn("worked").when(InjectorTest.class, "test");

    System.out.println("After the injection:");
    System.out.println(test());
}

public static String test() {
    return "did not work :(";
}

public static void main(final String[] args) { System.out.println("Before the injection:"); System.out.println(test()); PowerMock.mockStatic(InjectorTest.class); PowerMock.doReturn("worked").when(InjectorTest.class, "test"); System.out.println("After the injection:"); System.out.println(test()); } public static String test() { return "did not work :("; }



但是eclipse给出了这个错误:对于PowerMock类型,方法doReturn(String)是未定义的 我是否下载了错误的示例代码?或者是一个错误的示例代码?

因为我不想要更多投票,为什么我想这样做呢? 我想以这样的方式注入Minecraft,它不使用user.home而是使用相对URI 通过这种方式,我可以预先安装便携式Minecraft用于学校的USB记忆棒:D

1 个答案:

答案 0 :(得分:3)

我认为PowerMock可以做到这一点。 (引擎盖下的Java反思)

使用PowerMock,您的代码将如下所示:

public static void main(String[] args) {
    PowerMock.mockStatic(Foo.class); 
    PowerMock.doReturn("worked").when(Foo.class, "test");
    System.out.println(Foo.test());
}

对@RC的上述代码的信用