Issue
Suppose I make an abstract BaseActivity
with a Toolbar
, like this:
/**
* 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);
}
}
}
}
And a MainActivity
that extends this BaseActivity
, like this:
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
The layouts are:
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>
My question is: How can I test BaseActivity
using espresso? To, for example, check if the Toolbar
exists?
Solution
You should create a TestActivity for testing your abstract BaseActivity Class. But remember, this class should only override the necessary method and code to avoid any effect to the BaseActivity class.
public class TestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
And then you can use your Espresso to
@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());
}
}
Answered By - Long Ranger
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.