gpt4 book ai didi

java - 如何模拟 ENUM 类中的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:24:29 24 4
gpt4 key购买 nike

我正在为下面的 ENUm 类编写 JUNIT 测试用例。我的下面的类(class)只会给我运行代码的当前机器的主机名。当我编写 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();
}
}

最佳答案

可以,但不推荐,最好重构代码。

使用 Mockito/PowerMock 的工作示例

@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");
}
}

依赖

  • org.powermock:powermock-module-junit4:1.5.2
  • org.powermock:powermock-api-mockito:1.5.2
  • org.assertj:assertj-core:1.5.0
  • junit:junit:4.11

关于java - 如何模拟 ENUM 类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21202576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com