2016-08-24 2 views
2

Angenommen, ich eine abstrakte BaseActivity mit einem Toolbar machen, wie folgt aus:Wie kann ich eine abstrakte Klasse mit Espresso testen?

/** 
* A base activity that handles common functionality in the app. 
* This includes the Toolbar 
*/ 
public abstract class BaseActivity extends AppCompatActivity { 
    // Primary toolbar 
    private Toolbar mToolbar; 

    @Override 
    public void setContentView(int layoutResId) { 
     super.setContentView(layoutResId); 
     setToolbar(); 
    } 

    private void setToolbar() { 
     if (mToolbar == null) { 
      mToolbar = (Toolbar) findViewById(R.id.toolbar); 
      if (mToolbar != null) {    
       mToolbar.setNavigationContentDescription(getResources().getString(
        R.string.navigation_drawer_description_ally)); 
      setSupportActionBar(mToolbar); 
      } 
     } 
    } 
} 

Und ein MainActivity, die diese BaseActivity, wie diese erweitert:

public class MainActivity extends BaseActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

Die Layouts sind:

toolbar.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar 
xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" 
    android:elevation="@dimen/spacing_tiny" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    android:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
    android:fitsSystemWindows="true" 
    android:minHeight="?attr/actionBarSize" 
    > 

</android.support.v7.widget.Toolbar> 

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".MainActivity" 
    > 

    <include 
     layout="@layout/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 

</LinearLayout> 

Meine Frage ist: Wie kann ich BaseActivity testen mit espresso? Um zum Beispiel zu überprüfen, ob die Toolbar existiert?

Antwort

2

Sie sollten eine TestActivity zum Testen Ihrer abstrakten BaseActivity-Klasse erstellen. Denken Sie jedoch daran, dass diese Klasse nur die erforderliche Methode und den Code überschreiben sollte, um Auswirkungen auf die BaseActivity-Klasse zu vermeiden.

public class TestActivity extends BaseActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

Und dann können Sie Ihren Espresso zu

@RunWith(AndroidJUnit4.class) 
@SmallTest 
public class BaseActivityTest { 
    @Rule 
    public ActivityTestRule<TestActivity> mTestActivityActivityTestRule = new ActivityTestRule<TestActivity>(TestActivity.class, true, false); 
    @Before 
    public void set() { 
     //setup your things 
    } 
    @Test 
    public void testRequest1() { 
     mTestActivityActivityTestRule.launchActivity(new Intent()); 
    } 
} 
verwenden
Verwandte Themen