【发布时间】:2018-07-29 22:21:06
【问题描述】:
我正在尝试使用 PowerMock Whitebox setInternalState api 来覆盖最终类的静态最终变量。但这似乎不起作用。请看下面的示例代码:
带有静态最终变量的最终类:
public final class BuildConfig {
public static final String BUILD_TYPE = "debug";
}
返回上述变量的辅助类:
public class BuildConfigHelperClass {
public String getBuildType() {
return BuildConfig.BUILD_TYPE;
}
}
测试类
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
import static org.junit.Assert.*;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
@RunWith(PowerMockRunner.class)
@SuppressStaticInitializationFor("BuildConfig")
@PrepareForTest({BuildConfigHelperClassTest.class, BuildConfigHelperClass.class, BuildConfig.class})
public class BuildConfigHelperClassTest {
private BuildConfigHelperClass subject;
@Before
public void setUp() {
subject = new BuildConfigHelperClass();
}
@Test
public void shouldReturnDebugBuildType() {
assertEquals("debug", subject.getBuildType());
}
@Test
public void shouldReturnProductionBuildType() {
mockStatic(BuildConfig.class);
Whitebox.setInternalState(BuildConfig.class, "BUILD_TYPE", "production");
assertEquals("production", subject.getBuildType());
}
}
在上面的测试类中,第二个测试subject.getBuildType() 方法应该返回“production”,因为我通过 Whitebox 覆盖它,但它总是因为返回值(即“debug”)而失败。
任何人都可以指导我了解我所缺少的内容。
【问题讨论】:
标签: java android unit-testing powermock powermockito