仅使用AndroidJunit4时日历测试通过

问题描述

我有一个奇怪的案子。我正在运行本地测试,并在该测试中使用Calendar类。

通过@RunWith(AndroidJUnit4::class)注释测试类时,测试通过,否则,测试将失败。

测试代码不包含任何Android环境库

这是我的课程

class MyDateUtils(private val calendar: Calendar) {

    fun getDates(): Long{
        calendar.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY)
        return calendar.timeInMillis
    }
}

这是测试用例,这个通过了

@RunWith(AndroidJUnit4::class)
class MyDateUtilsTest {

    private lateinit var calendar: Calendar
    private lateinit var dateUtils: MyDateUtils

    @Before
    fun init() {
        calendar = Calendar.getInstance()
        calendar.timeInMillis = 1592422768000
        dateUtils = MyDateUtils(calendar)
    }

    @Test
    fun `when get dates is called with wednesday day should return sunday of the same week`() {
        val expected = 1592163568000

        val actual = dateUtils.getDates()

        assertEquals(expected,actual)

    }
}

现在,当我删除@RunWith(AndroidJUnit4::class)时,测试失败并显示此错误消息java.lang.AssertionError: Expected :1592163568000 Actual :1592768368000

P.S预期的行为是getDates()方法在同一周内返回星期日。但是没有 @RunWith(AndroidJUnit4::class),它将在下一个星期日(下周)返回。

解决方法

这可能与使用AndroidJUnit4运行时可能更改的默认语言环境有关。

在不同的地区,一周的第一天会有所不同,这可能会使测试失败或通过,具体取决于跑步者。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...