web-dev-qa-db-ja.com

エスプレッソでテスト注文

Androidでテスト実行順序を設定する方法はありますか?
私はEspressoフレームワークを使用しており、多くのアクティビティとそれらの間の移行をテストする必要があります。これらのアクティビティに対して別のテストを記述したいのですが、これらのテストを実行するには特定の順序が必要です。

25
mr. Nutscracker

@spinsterが上で述べたように、テストは順序が重要ではない方法で書く必要があります。

Junit 3は完全修飾クラス名のアルファベット順でテストを実行すると思います。したがって、理論的には、実行したい順にアルファベット順(パッケージ名、クラス名、メソッド名)で名前を付けることで順序を制御できますが、それはお勧めしません。

参照: JUnit4で特定の順序でテストメソッドを実行する方法?junitテストケースの実行シーケンスを事前定義する方法?

12
yogurtearl

エスプレッソセットのテストの実行順序

Junit 4.11以降、@ FixMethodOrderアノテーションが付属しています。カスタムソリューションを使用する代わりに、junitバージョンをアップグレードして、FixMethodOrder(MethodSorters.NAME_ASCENDING)でテストクラスに注釈を付けるだけです。詳細については、リリースノートを確認してください。

ここにサンプルがあります:

import org.junit.runners.MethodSorters;

import org.junit.FixMethodOrder;
import org.junit.Test;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {

   @Test
   public void A_firstTest() {
      System.out.println("first");
   }

   @Test
   public void B_secondTest() {
      System.out.println("second");
   }
}
38
Shivaraj Patil

次のように、テストランナーフィクスチャとして注釈を追加できます。

@FixMethodOrder(MethodSorters.NAME_ASCENDING)

クラス名のすぐ上

12
Anuja

はいtest_nameで注文番号を使用して注文を設定できます。以下の例を参照してください。

public class MyEspressoTest
        extends ActivityInstrumentationTestCase2<UserLoginActivity> {

    private UserLoginActivity mActivity;

    public MyEspressoTest() {
        super(UserLoginActivity.class);
    }

    @Before
    public void setUp() throws Exception {
        super.setUp();
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());
        mActivity = getActivity();
    }

    public void test1InvalidPropigerLogin() {
        // Type text and then press the button.

        //setContentView function to see the layout

        onView(withId(R.id.username))
                .perform(typeText("[email protected]"), closeSoftKeyboard());
        onView(withId(R.id.password))
                .perform(typeText("hhhhh"), closeSoftKeyboard());

        onView(withId(R.id.user_login_button)).perform(click());
        // Check that the text was changed.
        onView(withId(R.id.login_status))
                .check(matches(withText("Invalid username or password")));

        //System.out.println("Test pass with invalid user and password");
    }

    public void test2ValidPropigerLogin() {
        // Type text and then press the button.

        onView(withId(R.id.username))
                .perform(typeText("[email protected]"), closeSoftKeyboard());
        onView(withId(R.id.password))
                .perform(typeText("gggggg"), closeSoftKeyboard());

        onView(withId(R.id.user_login_button)).perform(click());

        //System.out.println("Test pass with valid user and password");
    }

    public void test3ForgetPasswordButton() {

        onView(withId(R.id.forgot_pwd_button)).perform(click());

        //onView(isRoot()).perform(ViewActions.pressBack());

        onView(withId(R.id.email_edittext))
                .perform(typeText("[email protected]"), closeSoftKeyboard());
        onView(withId(R.id.reset_password_button)).perform(click());
        // Check that the text was changed.
        onView(withId(R.id.reset_result))
                .check(matches(withText("Email not registered with propiger")));
    }
    public void test4ForgetPasswordButton2() {

        onView(withId(R.id.forgot_pwd_button)).perform(click());

        onView(withId(R.id.email_edittext))
                .perform(typeText("[email protected]"), closeSoftKeyboard());
        onView(withId(R.id.reset_password_button)).perform(click());
        // Check that the text was changed.
        onView(withId(R.id.reset_result))
                .check(matches(withText("Reset password link sent successfully")));
    }
    public void test5RegisterButton() {
        onView(withId(R.id.register_button)).perform(click());

              //onView(isRoot()).perform(ViewActions.pressBack());

        onView(withId(R.id.register_name_edittext))
                .perform(typeText("Hill Hacker"), closeSoftKeyboard());
        onView(withId(R.id.register_email_edittext))
                .perform(typeText("[email protected]"), closeSoftKeyboard());
        onView(withId(R.id.register_mobileno_edittext))
                .perform(typeText("9090909090"), closeSoftKeyboard());
        onView(withId(R.id.register_password_edittext))
                .perform(typeText("password111"), closeSoftKeyboard());
        onView(withId(R.id.register_confirm_password_edittext))
                .perform(typeText("password111"), closeSoftKeyboard());
        //onView(withId(R.id.register_country_spinner)).perform(click());
        //onView(isRoot()).perform(withId(R.id.register_country_spinner, Sampling.SECONDS_15));
        onData(allOf(is(instanceOf(String.class)), is("India")))
                .perform(click());

       onView(withId(R.id.register_country_spinner)).check(matches(withText(containsString("India"))));

        onView(withId(R.id.register_button)).perform(click());

    }


}
4
HillHacker

最初にloginActivityテストをテストする必要があります。成功した場合は、ユーザーにログインします。次に、他のアクティビティをテストする必要があります。最後にLogoutActivityテストを実行する必要があります。したがって、一連の活動テストが必要です。

2
Aravind S

あなたは3つの方法があります:



way 1:JUnit 4および5が機能します

@Test
public void testFunctionMain() {
    test1(); 
    test2()
    test3(); 
}

方法2: JUnit 4および5の作業

@FixMethodOrderを使用

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@RunWith(AndroidJUnit4::class)
class LoginActivityTest {
}

方法:Junit5作業

@Orderを使用

@Test
@Order(2)
public void testFunction(){
}
1
Rasoul Miri

注釈@ FixMethodOrder(MethodSorters.NAME_ASCENDING)をクラス名の上に追加し、メソッドに昇順で名前を付けます。

以下のリンクをご覧ください。答えはあなたのニーズを達成するためにあります。

https://stackoverflow.com/a/41198659/4675067

https://stackoverflow.com/a/34456810/4675067

1
Abish R