我甚至不确定这是否可行,但由于这个问题,我提出了这个想法: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
答案 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的上述代码的信用