我正在为我的ENUm课程编写JUNIT测试用例.我的下面的类只会给我当前运行我的代码的机器的主机名.当我正在编写JUNIT测试时,我怎么能模拟下面的类,这样我可以随时改变getHostName()方法,这样每当我调用时getDatacenter(),它都可以通过模拟它返回我传递的任何主机名.我不想把它作为参数化的.
我只想在模拟它的同时更改主机名时测试某些情况.
public enum DatacenterEnum {
DEV, DC1, DC2, DC3;
public static String forCode(int code) {
return (code >= 0 && code < values().length) ? values()[code].name() : null;
}
private static final String getHostName() {
try {
return InetAddress.getLocalHost().getCanonicalHostName().toLowerCase();
} catch (UnknownHostException e) {
s_logger.logError("error = ", e);
}
return null;
}
public static String getDatacenter() {
return getHostName();
}
}
Run Code Online (Sandbox Code Playgroud)
可以,但是不建议这样做,最好重构一下代码。
@RunWith(PowerMockRunner.class)
@PrepareForTest(DatacenterEnum.class)
public class DatacenterEnumTest {
@Mock
InetAddress inetAddress;
@Test
public void shouldReturnDatacenter() throws UnknownHostException {
//given
mockStatic(InetAddress.class);
given(inetAddress.getCanonicalHostName()).willReturn("foo");
given(InetAddress.getLocalHost()).willReturn(inetAddress);
//when
String datacenter = DatacenterEnum.getDatacenter();
//then
assertThat(datacenter).isEqualTo("foo");
}
}
Run Code Online (Sandbox Code Playgroud)