2017-10-22 11 views
-1

私はエスプレッソのテストを始めたばかりですが、StackOverFlowのトピックを検索して、私のニーズに対応するソリューションを見つけることができませんでした。Android Espresso:いくつかのアクティビティでテストスイートを作成するにはどうすればよいですか?


私の質問の前史:

私は活動の多くが付いているアンドロイドのアプリケーションを持っています。一般に、アプリのさまざまなフローに対して別々のUIテストが作成されました(それぞれのフローでは個別のアクティビティが必要なので、異なるクラスでテストを実装しています)。 私のケースでは、バックグラウンドとUIyncが発生するので、最初のアクティビティから開始して次と次を続けることができません。 私が見つけた唯一の解決策は、現在のアプリで実際に動作しています - アプリのアクティビティにアイドリングするリソースを使用しています。

これで、これらの別々のクラス(各クラスはこれらのルールに独自のルールとアクティビティを使用する)を機能スイートにどのように組み込むことができるのか理解しようとしていますか?


私の経験:

1)正 - 開発者のソースコードの変更を必要とアイドリングリソースを使用しますが、スイートで唯一の活動がまだある:

@RunWith(AndroidJUnit4.class)

@LargeTest

public class ForSeveralActs { @Rule public final ActivityTestRule<TargetedActivity> mTargetedActivityRule = new ActivityTestRule<>(TargetedActivity.class, true, true);

final String username = "[email protected]"; 
final String password = "12345678"; 
private IdlingResource mIdlingRecourse; 

@Before 
public void setIdleResource() { 
    mIdlingRecourse = mTargetedActivityRule.getActivity().getIdlingResource(); 
    Espresso.registerIdlingResources(mIdlingRecourse); 
} 

@Test 
public void PassPermission_and_goto_MainActivity() { 

    // First activity - LoginActivity 
    Espresso.onView(withId(R.id.activity_login_et_login)) 
      .perform(ViewActions.typeText(username)); 

    Espresso.onView(withId(R.id.activity_login_et_password)) 
      .perform(ViewActions.typeText(password)) 
      .perform(closeSoftKeyboard()); 

    Espresso.onView(withId(R.id.activity_login_btn_login)) 
      .check(matches(isDisplayed())) 
      .check(matches(isClickable())) 
      .perform(ViewActions.click()); 


    // Here is elements of second activity - MainActivity, without idling methods I can't reach this element 
    Espresso.onView(withId(R.id.helpMeCard_title)) 
      .check(matches(withText("help_me"))); 

} 

@After 
public void unregisteredIdlingResource() { 
    if (mIdlingRecourse != null) { 
     Espresso.unregisterIdlingResources(mIdlingRecourse); 
    } 
} 

したがって、この例では、私はいくつかのテストと最後の1次のアクティビティで実行されますがあります。


2)マイナス - 私はJUnitのテストスイートかかわらず、すべての私のテスト(クラス)を起動しようとしたので、私はちょうどJUnitのにもテストや活動のための規則を含むすべての私のクラスを()に置きますスイート(このシナリオでは全く動作しません):

@RunWith(Suite.class) 
@Suite.SuiteClasses(
    { 
      ESP_test1.class, 
      ESP_test2.class, 
      ESP_test3.class 
    }) 

public class ESP_start {} 

ここでは、私が上に掲示同じ質問です: はどのように私は別の活動やルールを使用している別のテストからスイートを作成することができ、どのようにのように見える?

答えて

0

もしかすると、おそらく答えが他の誰かにとって役に立ちます。このスイートは正しかった、以前は私のテストクラスでパラメータを使用していました。 は、テスト・クラスは任意ののparamsせずに無効である必要があり、この場合、アプリでは:誰でもいくつかの関連質問があるかどう

@RunWith(Suite.class) 
@Suite.SuiteClasses(
    { 
      ESP_test1.class, 
      ESP_test2.class, 
      ESP_test3.class 
    }) 

public class ESP_start {} 
+0

私は、この問題を閉じた - あなたは聞いて無料です。 –

関連する問題