【发布时间】:2018-05-11 08:19:02
【问题描述】:
我必须重构一些遗留代码,我已经开始做一些测试。这是正在测试的方法:
public static synchronized String getWeekFromDate(Date date) {
String strYyear = new SimpleDateFormat("yyyy").format(date);
String strMonth = new SimpleDateFormat("MM").format(date);
String strWeek = new SimpleDateFormat("ww").format(date);
int month = Integer.parseInt(strMonth);
if (month > 1 && "01".equals(strWeek)) {
int year = Integer.parseInt(strYyear);
return (year + 1) + "01";
}
return new SimpleDateFormat("yyyyww").format(date);
}
我写了五个测试用例,一切都是绿色的。现在,我想重构它。条件if (month > 1 && "01".equals(strWeek)) 对我来说毫无意义。可以读作:
给定一个日期,当月份不是一月而星期是 那一年的第一个
我说的对吗?是否有意义?我很确定我可以删除那段代码而不会产生任何后果。
我的测试用例是(全是绿色的):
- 给定 2018-01-03,它应该返回“201801”
- 给定 2018-02-01,它应该返回“201805”
- 给定 2018-08-15,它应该返回“201833”
【问题讨论】:
-
那是什么语言?看起来像 Java,但我看不出像
"yyyy".format(date)这样的东西甚至应该如何编译。另外,我看不出有任何理由让该方法同步。 -
@RobbyCornelissen 抱歉,我为这个问题更改了一些代码。已编辑!
-
您可以编写一个循环来测试过去 10 年左右的 all 日期,而不是手动选择几个“随机”日期。这很容易找到反例。之后,您可以保留边界案例反例以及介于两者之间的一些随机日期作为应保留的测试。
标签: java unit-testing refactoring code-coverage