2016-10-17 1 views
1

JUnitライブラリにはアサーションと同様に機能するAssume.assumeTrue(boolean)のような命令がAssume.*となっていますが、テストが失敗して無視されることはありません。エスプレッソテストによるビュー状態を想定する

arrange私の意見の1つのためのテストの一部で、このチェックを実行したいと仮定します。たとえば、actのテストを開始する前にチェックボックスがオンになっているとします。私はないViewが、ViewInteractionを受け取ったarrange一部で

@Rule 
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class); 

@Test 
public void deselectFilter_AllFiltersSelected_CheckboxAllSelectedUnchecked() { 
    //arrange 
    ViewInteraction checkBox = onView(
      allOf(withId(R.id.cbCheckAll), isDisplayed())); 

    //assume that this checkbox is checked 

    //act 
    ... 
    //assert 
    ... 
} 

は見てみましょう。 そうすることができますassertionのようにcheckBox.check(matches(isChecked()))
しかし、どのように実行するのですか?

答えて

2

コマンドは不可能エスプレッソから直接ビューにアクセスするようだ:

public static ViewAssertion assume(final Matcher<? super View> viewMatcher) { 
    return new ViewAssertion() { 
     @Override 
     public void check(final View view, final NoMatchingViewException noViewFoundException) { 
      try { 
       ViewAssertions.matches(viewMatcher).check(view, noViewFoundException); 
      } catch (Throwable e) { 
       // Assume that there is no exception 
       Assume.assumeNoException(e); 
      } 
     } 
    }; 
} 

次に、あなたは以下のように想定しているアサーションを使用することができます。

onView(withId(R.id.cbCheckAll)).check(assume(isChecked())); 
+0

ありがとうございました。これはオプションになる可能性があります。 – Beloo

0

この瞬間に私が設立した唯一の方法は、テストルールからのアクティビティで手動でビューを仮定することです。そして、jUnit経由で引き継ぎます。

CheckBox checkBox = (CheckBox) mActivityTestRule.getActivity().findViewById(R.id.cbCheckAll); 
Assume.assumeTrue(checkBox.isChecked()); 

あなたが良い方法を知っていれば、おそらくエスプレッソを使用して、答えてください。あなたはエスプレッソViewMatcherが失敗したときに何Exceptionがスローされないことを前提とするカスタムViewAssertionを書くことができ

関連する問題