我正在尝试为某个类编写测试用例。我想将测试用户的年龄设置为某个值,但我不想处理年龄计算和/或使junit测试用例与时间无关,我知道该怎么做感谢来自我的@SkinnyJ earlier post。
有没有办法做类似的事情:
LocalDate birthday = new LocalDate(72Y3M);
72岁零3个月是用户的理想年龄。然后joda-time将取这个数字并计算他/她的生日应该是那个年龄并返回该日期。所以在这种情况下,生日将是October 8, 1943
。
尝试1:
public LocalDate setUsersAge(int years, int months, int days) {
LocalDate birthday = new LocalDate();
birthday.minusYears(years);
birthday.minusMonths(months);
birthday.minusDays(days);
return birthday
}
尝试2:
public LocalDate setUsersAge(int years, int months, int days) {
Period age = new Period();
age.withYears(years);
age.withMonths(months);
age.withDays(days);
return birthday.minus(age);
}
虽然双向完成工作,但我不喜欢代码的外观。有更清洁的方法吗?
答案 0 :(得分:2)
我认为这是实现目标的一种相当简洁的方法:
public LocalDate setUsersAge(int years, int months, int days) {
return LocalDate.now().minusYears(years).minusMonths(months).minusDays(days);
}
编辑:感谢Basil Bourque的评论,如果您担心timeZone的问题,可以执行以下操作:
public LocalDate setUsersAge(int years, int months, int days, DateTimeZone timeZone) {
return LocalDate.now(timeZone).minusYears(years).minusMonths(months).minusDays(days);
}