【发布时间】:2014-04-20 23:55:32
【问题描述】:
我正在尝试为下面的旧遗留枚举类编写单元测试。我尝试进行单元测试的方法是 - toLocalPookString。
每当我运行我的单元测试代码时,它总是在toLocalPookString 方法中的if statement 内,因为this 总是被解析为CORP。
public enum DatacenterEnum {
CORP, PHX, SLC, LVS;
private static final DatacenterEnum ourlocation = compareLocation();
private static DatacenterEnum compareLocation() {
// some code here
}
private String toLocalPookString() {
if (this == CORP || !(TestUtils.getEnvironmentName().equalsIgnoreCase("production"))) {
return "/pp/dc/phx";
}
return "/pp/dc/" + name().toLowerCase();
}
public static final String BETA_POOK_STRING = ourlocation.toLocalPookString();
}
除了CORP 之外,我有什么办法可以模拟this 到PHX 或SLC 或LVS,以便在toLocalPookString 中它不应该进入if statement?我在这里使用 jmockit。
new MockUp<TestUtils>() {
@Mock
public String getEnvironmentName() {
return "production";
}
};
String ss = DatacenterEnum.BETA_POOK_STRING;
System.out.println(ss);
这很简单,但不知怎么我不明白怎么做?有什么想法吗?
【问题讨论】:
-
我很困惑,但这可能是漫长的一天。你能澄清一下吗?如果您正在对
toLocalPookString进行单元测试,为什么要模拟this?this不是你的 SUT 吗? -
@Lilshieste:我想这对我来说也是漫长的一天。但简而言之,我需要模拟
toLocalPookString使其不会进入 if 块。 -
我想我只是不清楚你在测试什么。为什么
this == CORP不是您要测试的? (我认为compareLocation函数的详细信息会有所帮助。)
标签: java unit-testing enums jmockit