我是相當新的測試,並試圖探索jUnit測試和Robotium
。我的應用程序有4個屏幕。Android jUnit TestCase:活動onCreate()實際上何時被調用?
Splash Screen --> Screen2--> Screen 3--> Autocomplete Screen.
[init()] [ check values generated by init() method]
自動完成屏幕是用戶輸入內容的地方,應用程序會從產品的大型數據庫執行自動完成。在啓動畫面中,我正在使用另一個類中的init()
方法初始化許多應用程序變量。這個init()
方法將加載usedr首選項,檢查數據庫的創建等...(產品數據庫預先打包在apk中,我在第一次啓動時複製數據庫並將其標記爲SharedPreferences
,如copied = true)。
問題:我如何隔離自動完成屏幕的測試? AutocompleteActivity的onCreate依賴於SplashScreen中調用的init()。我不確定何時jUnit創建了Activity
的實例,(可能在構造函數中?)。這裏是我的TestCaseCode:
import android.test.ActivityInstrumentationTestCase2;
import android.view.View;
import android.widget.ListView;
import com.jayway.android.robotium.solo.Solo;
import com.supervalu.mobile.android.AutoCompleteActivity;
import com.supervalu.mobile.android.db.LocalDb;
public class AutocompleteTest extends
ActivityInstrumentationTestCase2<AutoCompleteActivity> {
private Solo solo;
public AutocompleteTest() {
super("com.****.*****.*****", AutoCompleteActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
LocalDb.init(getActivity().getApplicationContext());
solo = new Solo(getInstrumentation(), getActivity());
}
public void test1Character() {
solo.sleep(2000);
solo.enterText(0, "c");
solo.sleep(10000);
View v = getActivity().findViewById(
com.*****.****.*****.R.id.list);
solo.waitForView(v);
assertTrue(((ListView) v).getChildCount() > 0);
}
public void test3Character() {
LocalDb.init(getActivity().getApplicationContext());
solo.enterText(0, "che");
View v = getActivity().findViewById(
com.*****.****.*****.R.id.list);
solo.waitForView(v);
assertTrue(((ListView) v).getChildCount() > 0);
}
protected void tearDown() throws Exception {
solo.finishOpenedActivities();
super.tearDown();
}
測試用例保持creashing,因爲需要的onCreate從LocalDb
whcih必須由init()
方法initialiazed一些值。
我不能在構造函數中的超級調用之前添加init()函數。是否有任何解決此問題的方法,或者是否需要從啓動屏幕啓動測試用例?
問題2:如果我從啓動屏幕開始測試,我必須先導航到autocmplete屏幕,然後才能對其執行任何測試。假設我也這樣做了,那麼對於每個測試:test1character()該類執行setUp(),然後測試然後tearDown(),然後重新啓動test3characters()函數的整個序列。在實際測試輸入之前,每次都重複導航到自動合併屏幕會非常痛苦。對此也有任何建議?
我不知道採取什麼方法。有人能指導我嗎?