我正在尝试为某个类编写测试用例。我想将测试用户的年龄设置为某个值,但是我不想处理年龄计算和/或使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);
}


尽管两种方法都能完成工作,但我只是不喜欢代码的外观。有没有更清洁的方法可以做到这一点?

最佳答案

我认为这是达到目标的一种相当干净的方法:

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

10-06 10:37
查看更多