私はテストにかなり慣れていないので、jUnit テストとRobotium
. 私のアプリケーションには 4 つの画面があります。
Splash Screen --> Screen2--> Screen 3--> Autocomplete Screen.
[init()] [ check values generated by init() method]
オートコンプリート画面は、ユーザーが何かを入力する場所であり、アプリは製品の大規模なデータベースからオートコンプリートを実行します。スプラッシュ スクリーンではinit()
、別のクラスのメソッドを使用して多くのアプリ変数を初期化しています。このinit()
メソッドは、ユーザーの設定をロードし、データベースの作成をチェックします... (製品データベースは apk に事前にパッケージ化されており、最初の起動時にデータベースをコピーし、copyed SharedPreferences
=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();
}
LocalDb
onCreate には、メソッドによって初期化する必要があった Whcih からのいくつかの値が必要なため、テスト ケースはクラッシュし続けますinit()
。
コンストラクターでのスーパー呼び出しの前に init() 関数を追加できません。これを回避する方法はありますか、それともスプラッシュ スクリーンからテスト ケースを開始する必要がありますか?
問題 2 : スプラッシュ画面からテストを開始した場合、テストを実行する前に、最初にオートコンプリート画面に移動する必要があります。同様にそれを行ったとします。次に、各テストについて、test1character() クラスが setUp() を実行し、次にテスト、tearDown() を実行し、test3characters() 関数のシーケンス全体を再開します。実際に入力をテストする前に、毎回オートコンプリート画面への移動を繰り返し続けるのは非常に面倒です。これについても何か提案はありますか?
どのようなアプローチを取るべきかわかりません。誰かが私を案内してもらえますか?