java - 如何使用 Espresso 测试抽象类?

标签 java android testing android-testing android-espresso

假设我用 Toolbar 创建了一个抽象的 BaseActivity ,像这样:

/**
 * 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);
            }
        }
    }
}

还有一个扩展此 BaseActivityMainActivity,如下所示:

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

布局是:

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>

我的问题是:如何使用 espresso 测试 BaseActivity ?例如,检查 Toolbar 是否存在?

最佳答案

您应该创建一个 TestActivity 来测试您的抽象 BaseActivity 类。但请记住,此类应仅覆盖必要的方法和代码,以避免对 BaseActivity 类产生任何影响。

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

然后您可以使用 Espresso

@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());
    }
}

关于java - 如何使用 Espresso 测试抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39113061/

相关文章:

java - 如何使用 SVN 工具包 jar 从 SVN 中删除文件

android - 什么是 "AutomaticZenRule"?它是干什么用的?

testing - 最低精度的 ULP 单位

perl - 如何更改 ExtUtils::Makemaker 中保存测试文件的目录?

java - 如何从 thymeleaf 中的属性文件中读取值

java - 检测客户端中止请求 Jersey

java - 如何在屏幕上只显示 map 的一部分

android - 在 Android Studio 中启用 Proguard 后制作签名的 apk 时出错

java - 如何在 Java 上使用单元测试来测试与类的私有(private)字段的交互?

java - rangeOrOdd - 如果输入数字在范围内和/或奇数,则返回 1