Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅使用AndroidJunit4时,日历测试通过_Android_Unit Testing_Kotlin_Junit4 - Fatal编程技术网

仅使用AndroidJunit4时,日历测试通过

仅使用AndroidJunit4时,日历测试通过,android,unit-testing,kotlin,junit4,Android,Unit Testing,Kotlin,Junit4,我有个奇怪的案子。我正在运行一个本地测试,并在该测试中使用Calendar类 使用@RunWith(AndroidJUnit4::class)注释测试类时,测试通过,否则测试失败 测试代码不包括任何Android环境库 这是我的班级 class MyDateUtils(private val calendar: Calendar) { fun getDates(): Long{ calendar.set(Calendar.DAY_OF_WEEK, Calendar.SU

我有个奇怪的案子。我正在运行一个本地测试,并在该测试中使用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实际:1592768368000


另外,预期的行为是
getDates()
方法在同一周内返回Sunday。但是如果不使用
@RunWith(AndroidJUnit4::class)
它将在下一个星期日(下周)返回。

这可能与使用AndroidJUnit4运行时可能更改的默认区域设置有关


对于不同的区域设置,一周的第一天是不同的,这可能会导致测试失败或通过,具体取决于运行者。

我想这可能是某个地方的区域设置问题,因为在计算机而不是设备上运行测试。设置当前时间后,如果在设置日期之前调用
getTimeInMillis
,是否会使其保持一致?您好,感谢您的评论。我不知道你到底想让我试试什么。您能澄清一下吗?这可能与使用AndroidJUnit4运行时可能更改的默认语言环境有关。我想知道一周的第一天是否会有所不同,这取决于你是否在跑步。1.您可以编写一些调试语句来回答这个问题。2.你能发布计算日期的代码吗?(什么计算由
getDates()
返回的值)。您好,@PedroLoureiro。我认为你是对的。这与语言环境有关。我在这两种情况下都尝试过调试,并检查了
val first=calendar.firstDayOfWeek
,发现结果不同,所以在测试中,我设置了如下区域设置
locale=locale(“US”)calendar=calendar.getInstance(locale)
,并通过了测试。考虑把这个写为答案,我会把它标记为正确的。谢谢我说的是日历。timeInMillis=1592422768000;calendar.getTimeInMillis();dateUtils=MyDateUtils(日历)让它工作吗
Calendar
s是使用当前时间(取决于区域设置)创建的,当您设置
timeInMillis
时,直到调用
get
方法,它才真正得到重新计算。因此,当您设置时间,然后设置日期时,挂起的时间更改可能会被覆盖/忽略。设置时间后调用
get
方法会将其锁定<代码>日历既奇怪又复杂