2016-04-29 36 views
5

私は実際にエスプレッソで単体テストをセットアップしようとしましたが、数時間の研究の後、アプリはクリックだけをしてEditTextでフォーカスを取得しますが、その後は何もありませんシンプルなエスプレッソテスト「繰り返しx秒間繰り返し」エラー

私はいくつかの場合、私は実際に活動中で、現在の断片を置換

のためのいくつかのコールバックを使用swiperefresh

とバグがありました原因私はすべてのアニメーション& SwipeRefreshLayoutを削除した

Caused by: android.support.test.espresso.AppNotIdleException: Looped for 1996 iterations over 60 SECONDS. The following Idle Conditions failed . 

一つは、あなたは私がu_u検索の4時間後によいくつかのヒントに

感謝を持っている:)


私のGradleは依存関係:

// App dependencies 
compile 'com.android.support:support-annotations:23.3.0' 
compile 'com.google.guava:guava:18.0' 
// Testing-only dependencies 
// Force usage of support annotations in the test app, since it is internally used by the runner module. 
androidTestCompile 'com.android.support:support-annotations:23.3.0' 
androidTestCompile 'com.android.support.test:runner:0.4.1' 
androidTestCompile 'com.android.support.test:rules:0.4.1' 
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' 
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.2' 

私はdefaultConfigでこれを追加しました:

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 

私のテストがあります:

@RunWith(AndroidJUnit4.class) 
@LargeTest 
public class HelloWorldEspressoTest { 

    public static final String USERNAME = "do_f"; 

    @Rule 
    public ActivityTestRule<LoginActivity> mActivityRule = new ActivityTestRule(LoginActivity.class); 

    private LoginActivity mActivity = null; 

    @Before 
    public void setActivity() { 
     mActivity = mActivityRule.getActivity(); 
    } 

    @Test 
    public void login_LoginActivity() { 

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

     onView(withId(R.id.login_username)) 
       .perform(typeText(USERNAME), closeSoftKeyboard()); 
    } 
} 

私の活動があります:

public class LoginActivity extends AppCompatActivity 
     implements MenuFragment.OnFragmentInteractionListener { 

    private FragmentManager fm; 

    public static void newActivity(Activity activity) 
    { 
     Intent i = new Intent(activity, LoginActivity.class); 
     activity.startActivity(i); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
     SharedPreferences sp = getSharedPreferences(Utils.SP, Context.MODE_PRIVATE); 

     if (!sp.getString(Utils.TOKEN, "null").equals("null")) 
     { 
      MainActivity.newActivity(this); 
      finish(); 
     } 

     fm = getFragmentManager(); 
     fm.beginTransaction() 
       .replace(R.id.container, MenuFragment.newInstance()) 
       .addToBackStack(null) 
       .commit(); 
    } 

    @Override 
    public void onBackPressed() 
    { 
     if (getFragmentManager().getBackStackEntryCount() > 1) 
      getFragmentManager().popBackStack(); 
     else 
      super.onBackPressed(); 
    } 

    @Override 
    public void showLogin() { 
     fm.beginTransaction() 
       .replace(R.id.container, LoginFragment.newInstance()) 
       .addToBackStack(null) 
       .commit(); 
    } 

    @Override 
    public void showRegister() { 
     fm.beginTransaction() 
       .replace(R.id.container, RegisterFragment.newInstance()) 
       .addToBackStack(null) 
       .commit(); 
    } 
} 

そして、私のLoginFragment:

private static final String  TAG = "LoginFragment"; 

@Bind(R.id.loading_spinner) 
ProgressBar loading; 

@Bind(R.id.content) 
LinearLayout content; 

@Bind(R.id.login_username) 
EditText  username; 

@Bind(R.id.login_password) 
EditText  password; 

public LoginFragment() { 

} 

public static LoginFragment newInstance() { 
    return new LoginFragment(); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.login_fragment_login, container, false); 
    ButterKnife.bind(this, v); 
    return v; 
} 

@Override 
public void onActivityCreated(Bundle saveInstanceState) { 
    super.onActivityCreated(saveInstanceState); 
} 

@OnClick(R.id.login_submit) 
public void onSubmit(View v) 
{ 
    if (username.getText().length() == 0 
      || password.getText().length() == 0) 
    { 
     Snackbar.make(getView(), "blabla", Snackbar.LENGTH_SHORT).show(); 
     return ; 
    } 
    //hideContent(); 
    LoginPost p = new LoginPost(username.getText().toString(), password.getText().toString()); 
    Call<LoginResponse> call = RestClient.get().login(p); 
    call.enqueue(new Callback<LoginResponse>() { 
     @Override 
     public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) { 
      if (response.body() == null) { 
       String msg = getResources().getString(R.string.login_error_bad_credentials); 
       Snackbar.make(getView(), msg, Snackbar.LENGTH_SHORT).show(); 
       //showContent(); 
      } else { 
       SharedPreferences sp = getActivity().getSharedPreferences(Utils.SP, Context.MODE_PRIVATE); 
       sp.edit().putString(Utils.TOKEN, response.body().getToken()).apply(); 
       sp.edit().putString(Utils.USERNAME, username.getText().toString()).apply(); 
       MainActivity.newActivity(getActivity()); 
       getActivity().finish(); 
      } 
     } 

     @Override 
     public void onFailure(Call<LoginResponse> call, Throwable t) { 
      Snackbar.make(getView(), "onFailure", Snackbar.LENGTH_SHORT).show(); 
      //showContent(); 
     } 
    }); 
} 

答えて

4

私は「ので、ループの反復がこの

<ProgressBar 
    android:id="@+id/loading_spinner" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:indeterminateTintMode="src_atop" 
    android:indeterminateTint="@color/ganjify" 
    android:alpha="0" 
    android:layout_gravity="center" /> 

によって引き起こされた、解決策を見つけました私はそれを使用しないときに可視性をGONEに設定しないでください!

loading.setVisibility(View.GONE); 
+0

私も同じ問題を抱えている、私は –

+0

...それをチェックして、まだ同じ問題を取得するために、プログレスバーの負荷にGONEに可視性を設定し@DineshVGねえ、あなたはあなたのアニメーションのすべてをかどうかを確認する必要がありエスプレッソテストはループします。 –

+0

私と同じです。可視性の代わりにアルファベット0を設定してください - > AppNotIdleException(あなたがそれを知っていれば明らかです:D) – crysxd