我是相当新的测试,并试图探索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()函数的整个序列。在实际测试输入之前,每次都重复导航到自动合并屏幕会非常痛苦。对此也有任何建议?
我不知道采取什么方法。有人能指导我吗?