【发布时间】:2017-06-20 09:30:14
【问题描述】:
我有如下方法,
public static boolean isBetweenMonthDays(int startDayOfMonth,
int endDayOfMonth) {
LocalDate today = LocalDate.now();
if (today.getDayOfMonth() >= startDayOfMonth
&& today.getDayOfMonth() <= endDayOfMonth) {
return true;
}
return false;
}
这是实用程序类中的一个简单方法,但也有许多其他复杂的方法,结果取决于今天的日期,所以我的断言在某些日期会失败。
对此类方法进行单元测试的首选是什么?
更新: 这些单元测试是否被认为是不好的做法,因为大多数人都建议注入 LocalDate 依赖项并使类可测试?
我很犹豫,因为它是一个静态实用程序类,并且客户端只能处理整数?
@Test
public void testIsBetweenMonthDays_success_true() {
LocalDate today = LocalDate.now();
boolean result = ResponseMatchingUtil.isBetweenMonthDays(10, 25);
if (today.getDayOfMonth() >= 10 && today.getDayOfMonth() <= 25)
assertTrue(result);
else
assertFalse(result);
}
@Test
public void testIsBetweenMonthDays_success_false() {
LocalDate today = LocalDate.now();
boolean result = ResponseMatchingUtil.isBetweenMonthDays(4, 10);
if (today.getDayOfMonth() >= 4 && today.getDayOfMonth() <= 10)
assertTrue(result);
else
assertFalse(result);
}
【问题讨论】:
-
我会说你应该模拟日期。
-
移除对当前日期的依赖:注入
today。 -
@AndyTurner:这是一种具有静态实用方法的实用类。
-
@SabirKhan 这与其可测试性完全无关。不知何故,您需要能够获得可以控制的日期、时间等,您可以通过注入这些日期、时间等的源来做到这一点。请注意,“注入”并不是指“使用依赖注入框架” (必然):我的意思是将
LocalDate作为参数传递给方法。
标签: java unit-testing java-8