黄瓜/Java 验证 3 个月前的结果日期



我是Cucumber/java框架的新手。我正在尝试验证包含 3 个月前月份的网页上的信息。所以例如: 1. 我搜索一些信息。 2.过滤3个月。 3. 执行断言以验证我的筛选器是否显示 3 个月前的结果。网页中有一列显示日期 mm/dd/yy。所以我需要创建一个方法来验证日期是 3 个月前的月份和/或年份?

@Then("Verify that the filtered results display information dated back 90 days")
**public void verifyFilterBuilds90Days() { assert dashBoardPage.verifyFilterBuilds90Days();** }

public int verifyFilterBuilds90Days(){
Calendar calMinus3Months = Calendar.getInstance();
calMinus3Months.add(Calendar.MONTH, -3);
return Calendar.MONTH;
}

java.time

你在追求这样的事情吗?

DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uu");
String dateFromWebPage = "10/21/19";
String expected = LocalDate.now(ZoneId.systemDefault())
.minusMonths(3)
.format(dateFormatter);
if (dateFromWebPage.equals(expected)) {
System.out.println("They agree");
} else {
System.out.println("They do not agree");
}

当我刚才运行这段代码时,输出是:

他们同意

但请注意:

  • 如果在生成网页和运行测试之间经过午夜,则日期不再一致。
  • 如果 Web 服务器和您的计算机使用不同的时区,则日期可能并不总是一致的。
  • 最糟糕的是,"3个月前"并不总是明确定义的。从 3 月 31 日起是哪一个月?不可能是 2 月 31 日,因为 2 月只有 28 或 29 天。

我想防弹测试将产生 1 到 3 或 4 或 5 个日期,考虑到这些要点,这是可以接受的,如果网页上实际打印了其中一个,则感到满意。例如:

// Assume that the web page has been generated within the last hour
LocalDate earliestExpected = OffsetDateTime.now(ZoneOffset.MIN)
.minusHours(1)
.toLocalDate()
.minusMonths(3);
LocalDate latestExpected = LocalDate.now(ZoneOffset.MAX)
.minusMonths(3);
System.out.println("Expected interval: " + earliestExpected + " - " + latestExpected);
LocalDate actual = LocalDate.parse(dateFromWebPage, dateFormatter);
if (actual.isBefore(earliestExpected) || actual.isAfter(latestExpected)) {
System.out.println("They do not agree");
} else {
System.out.println("They agree");
}

当我刚才(在我的时区的 1 月 22 日早上(运行此代码段时,输出为:

Expected interval: 2019-10-21 - 2019-10-22
They agree

如果我们在非闰年的 3 月 1 日中午 UTC 运行它,则预计的日期间隔可能包括 11 月 28 日、29 日和 30 日以及 12 月 1 日和 2 日(都在前一年(,因为那时地球上会有地方仍然是 2 月 28 日,而其他地方已经是 3 月 2 日。如果我们在 5 月 31 日至 6 月 1 日之间的午夜附近运行它,则预期的间隔将仅包括 2 月 28 日和 3 月 1 日,因为 java.time 将从 5 月 31 日开始的 3 个月定义为 2 月的最后一天。

链接:Oracle教程:日期时间解释如何使用java.time。

最新更新