我这样想在测试用例条款。 beginDate
和endDate
的值是什么会导致这种方法返回true或false?
例如,如果他们在同一年?也许这两个值都在2月29日的同一侧,或者它们跨越了它。
如果他们在不同的年份呢?如果那些年份相邻,或者如果有其他年份呢?也许这些干涉的年代都不是闰年。
然后你可以在这种情况下做什么,把这些情况的例子,然后写一个方法,调整它,直到所有的断言通过。
以下是您可以采取的方法。您可能希望添加beginDate
和/或maturity
闰日登陆的案例。
public class Q26403911 {
@Test
public void testContainsLeapYear() throws Exception {
Assert.assertTrue(isContainsLeapYear(LocalDate.of(1984, 2, 28), LocalDate.of(1984, 3, 1)));
Assert.assertFalse(isContainsLeapYear(LocalDate.of(1985, 2, 28), LocalDate.of(1985, 3, 1)));
Assert.assertFalse(isContainsLeapYear(LocalDate.of(1984, 2, 27), LocalDate.of(1984, 2, 28)));
Assert.assertFalse(isContainsLeapYear(LocalDate.of(1984, 3, 1), LocalDate.of(1984, 3, 2)));
Assert.assertTrue(isContainsLeapYear(LocalDate.of(1984, 2, 28), LocalDate.of(1985, 3, 1)));
Assert.assertTrue(isContainsLeapYear(LocalDate.of(1983, 3, 1), LocalDate.of(1984, 3, 1)));
Assert.assertFalse(isContainsLeapYear(LocalDate.of(1984, 3, 1), LocalDate.of(1985, 3, 1)));
Assert.assertFalse(isContainsLeapYear(LocalDate.of(1983, 2, 28), LocalDate.of(1984, 2, 28)));
Assert.assertTrue(isContainsLeapYear(LocalDate.of(1983, 3, 1), LocalDate.of(1985, 2, 28)));
Assert.assertFalse(isContainsLeapYear(LocalDate.of(1985, 3, 1), LocalDate.of(1987, 2, 28)));
}
public boolean isContainsLeapYear(LocalDate beginDate, LocalDate maturity) {
if (beginDate.getYear() == maturity.getYear())
{
if (!Year.isLeap(beginDate.getYear()))
{
return false;
}
if (maturity.isBefore(LocalDate.of(beginDate.getYear(), Month.FEBRUARY, 29)))
{
return false;
}
if (beginDate.isAfter(LocalDate.of(maturity.getYear(), Month.FEBRUARY, 29)))
{
return false;
}
return true;
}
else if (Year.isLeap(beginDate.getYear())
&& !beginDate.isAfter(LocalDate.of(beginDate.getYear(), Month.FEBRUARY, 29)))
{
return true;
}
else if (Year.isLeap(maturity.getYear())
&& !maturity.isBefore(LocalDate.of(maturity.getYear(), Month.FEBRUARY, 29)))
{
return true;
}
else
{
for (int year = beginDate.getYear() + 1; year < maturity.getYear(); year++)
{
if (Year.isLeap(year))
{
return true;
}
}
}
return false;
}
}
只是检查二月月的最后日期 – Roshan 2014-10-16 12:09:57
它是一个乔达时间或Java 8时API的问题吗?答案可能会有所不同...... – assylias 2014-10-16 14:00:41
@assylias Java 8.谢谢:-) – YvesHendseth 2014-10-16 14:06:37