2

Robotiumでアプリのログインをテストしていますが、問題が発生しています。2つの異なるユーザータイプがあるので、3つのテストを行いました。タイプごとに1つ、ログインに失敗したものがもう1つあります。それらを個別に実行すると、すべて成功しますが、すべてのテストケースを実行すると、1つが実行され、tearDown(solo.finishOpenedActivities)が実行され、他のテストを実行するためのアクティビティは再開されません。したがって、EditTextを要求しているときの2番目のテストでは、それは利用できないと表示されます。

これが私のコードです:

public class TestLogin extends ActivityInstrumentationTestCase2<MainActivity> {

private Solo solo;

public TestLogin() {
    super("com.truekke4.test", MainActivity.class);
}

@Override
protected void setUp() throws Exception {
    solo = new Solo(getInstrumentation(), getActivity());
    super.setUp();
}

@Override
public void tearDown() throws Exception {
    getActivity().logout();
    solo.finishOpenedActivities();
    super.tearDown();
}

public void testUsuarioDesconocido() {
    solo.clearEditText(0);
    solo.enterText(0, "usuario desconocido");
    solo.assertCurrentActivity("Error", MainActivity.class);
    solo.clickOnButton("OK");
    solo.clickOnButton("OK");
    solo.assertCurrentActivity("Error", MainActivity.class);
}

public void testUsuario() {
    solo.clearEditText(0);
    solo.enterText(0, "usuario");
    solo.clickOnButton("OK");
    solo.assertCurrentActivity("Error", InicioUsuarioActivity.class);
}

public void testEmpresa() {
    solo.clearEditText(0);
    solo.enterText(0, "empresa");
    solo.clickOnButton("OK");
    solo.assertCurrentActivity("Error", InicioPymeActivity.class);
}

}

アクティビティを手動で再開する必要がありますか?Create and Intent and startActivity(intent)?

開かれた活動を終える必要はありませんか?または、アクティビティを終了する必要がありますが、setUp()でアクティビティを再起動します。Robotiumを認識できるようにするためのアクティビティを再開または作成するにはどうすればよいですか?

ヘルプ!

4

2 に答える 2

3

setUp()Robotiumメソッドを使用するのではなく、ActivityInstrumentationTestCase2からメソッドをオーバーライドしているため、問題が発生していると思われます。テストクラスでは、Robotiumは、public void setUp()テストを構成するためのシグネチャを持つメソッドを探します。これは、オーバーライドできるメソッドと同じ名前であるため、混乱する可能性があります。保護されたセットアップがいつ、どのくらいの頻度で呼び出されるかはわかりませんが、Robotiumは個々のテストの前に呼び出すことが保証されているため、ソロを初期化するのに最適な場所はパブリックセットアップです。変更してみてください:

@Override
protected void setUp() throws Exception

に:

public void setUp() throws Exception

同じメソッド本体を使用して(ただし@Overrideアノテーションなしで)、すべてのテストを実行できるかどうかを確認します。

于 2013-01-31T15:07:18.173 に答える
2

あなたがコードを持っているところ:

@Override
protected void setUp() throws Exception {
    solo = new Solo(getInstrumentation(), getActivity());
    super.setUp();
}

成功する:

@Override
protected void setUp() throws Exception {
    super.setUp();
    solo = new Solo(getInstrumentation(), getActivity());
}

何らかの理由でこれが機能しない場合は、クラスがティアダウンで適切にスクラブされない場合は、setActivity(null)を呼び出してgetActicity()にアクティビティを再度起動させるか、手動でlaunchActivityを呼び出すことができます。

于 2013-01-31T07:54:55.247 に答える