咱們知道在Android App測試時,當咱們想把應用程序恢復的初始狀態,咱們一般能夠有如下幾種作法: shell
到Setting -> Apps -> 單擊咱們要測得應用程序 -> 選擇Clear data 安全
這樣從新啓動App的時候,咱們的程序就處於初始狀態了。 app
固然咱們也是可使用命令行來操做的,好比: 單元測試
adb shell pm clear my.app.package
只要把對應的包名,改爲你本身的就能夠了。 測試
要是能自動化就更加完美了,這樣咱們就能夠在咱們的自動化Case裏添加相應的恢復App原始狀態的代碼了,如此咱們就能夠保證咱們的Case老是在一個一致的測試環境中,豈不更美? ui
這裏我找到了兩種方法。 this
Set objWsh = CreateObject("Wscript.Shell") objWsh.Run "adb shell pm clear my.app.package",1, True
Context context = this.getInstrumentation().getTargetContext().getApplicationContext(); Editor edit = context.getSharedPreferences(m_strPreferencesName, Context.MODE_PRIVATE).edit(); edit.clear(); edit.commit();
固然我這裏是刪除名叫「m_strPreferencesName」的數據,若是咱們想刪除其餘,或者全部的Share Preferences數據都是能夠的。 spa
雖然Java 有Java.lang.runtime,咱們能夠經過它在運行時去執行Command命令,完成一些操做,可是在Android裏,相似下面的代碼就不能夠: 命令行
try { Runtime.getRuntime().exec("adb shell pm clear com.my.package"); } catch(IOException ex) { ex.printStackTrace(); }
這裏不會拋任何異常,並且也不會清除App的數據。
這是由於Andorid的安全機制不容許一個App去刪除另外一個App的數據。
參考資料:
http://stackoverflow.com/questions/5544205/accessing-application-context-from-testsuite-in-setup-before-calling-getactivi
http://stackoverflow.com/questions/4856955/how-to-programatically-clear-application-data