【发布时间】:2011-06-08 23:14:28
【问题描述】:
我的应用程序应该在一段时间(几小时或几天)后发生一些变化,我想测试一下。
我尝试在我的单元测试中使用 SystemClock.setCurrentTimeMillis() 来模拟时间/日期的变化,但没有任何运气。
我在应用程序和测试应用程序的清单中声明了<uses-permission android:name="android.permission.WRITE_SETTINGS" />,这并没有改变任何东西。
此时,我正在模拟器上运行这些测试,如果这有什么不同的话......
编辑:在 Nick 的帮助下,还请求了 SET_TIME 权限:
<uses-permission android:name="android.permission.SET_TIME" />
但是现在,logcat 显示:
WARN/PackageManager(59): Not granting permission android.permission.SET_TIME to package com.matthieu.tests (protectionLevel=3 flags=0xbe46)
另一个编辑:用 dtmilano 的回答...
在我的测试中添加了这段代码(使用正确的 try/catch):
Runtime.getRuntime().exec("date \"$((10800 + $(date +%s)))\"").waitFor();
当我在 shell 上运行时,我可以毫无问题地运行该命令,并且我看到模拟器中的时间发生了变化(我试图增加 3 小时)。当我用我的代码运行我的测试时,时间根本没有改变......?
我在命令行上做的是:
date "$((10800 + $(date +%s)))"
我怀疑我需要在 Runtime.exec 中添加“adb shell”部分...
似乎这是在正确的道路上,但仍然无法使其运行。它也可能与尼克指出的那样,它需要一个系统进程才能改变时间......?
【问题讨论】:
标签: android unit-testing