Android上的单元测试Dropbox数据存储API

时间:2014-11-29 10:32:20

标签: android unit-testing dropbox dropbox-api datastore

我想将自己的查询调用(CRUD)单元测试到Datastore API on Android

Robolectric

我尝试使用Robolectric。这是我测试代码的一部分:

TestActivity activity;

@Before
public void setup() {
    this.activity = Robolectric.buildActivity(TestActivity.class).create().get();
}

@Test
public void shouldHaveHappySmiles() throws Exception {
    assertTrue(activity.getAccount().isLinked());
}

我在我的应用程序代码中的TestActivity中初始化实例。这是重要的代码部分:

import com.dropbox.sync.android.DbxAccount;
import com.dropbox.sync.android.DbxAccountManager;

    public class TestActivity extends Activity {

    private DbxAccountManager mDbxAcctMgr;
    private DbxAccount mAccount;

    public DbxAccount getAccount() {
            mDbxAcctMgr = DbxAccountManager.getInstance(getApplicationContext(), "xxx", "zzz");
            mAccount = DropboxUtils.getLinkedAccount(mDbxAcctMgr);
            return mAccount;
    }
}

这是它落空的地方:

DbxAccountManager.getInstance(getApplicationContext(), "xxx", "zzz");

堆栈跟踪和错误消息是:

com.dropbox.sync.android.DbxRuntimeException$BadState: Required Sync API Activity isn't included in application manifest: com.dropbox.client2.android.AuthActivity, com.dropbox.sync.android.DbxAuthActivity
at com.dropbox.sync.android.CoreAndroidUtil.validateHaveAuthActivities(CoreAndroidUtil.java:244)
at com.dropbox.sync.android.DbxAccountManager.validateAppContext(DbxAccountManager.java:511)
at com.dropbox.sync.android.DbxAccountManager.getInstance(DbxAccountManager.java:193)
at com.dropbox.sync.android.DbxAccountManager.getInstance(DbxAccountManager.java:160)
at com.dropbox.sync.android.DbxAccountManager.getInstance(DbxAccountManager.java:107)

所需的活动在我的清单中:

<activity android:name="com.dropbox.sync.android.DbxAuthActivity" />
<activity
    android:name="com.dropbox.client2.android.AuthActivity"
    android:launchMode="singleTask" >
    <intent-filter>
        <data android:scheme="db-zzz" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
<service
    android:name="com.dropbox.sync.android.DbxSyncService"
    android:enabled="true"
    android:exported="false"
    android:label="Dropbox Sync" />

在生产模式中(所以当一个人只使用应用程序时)没有这样的错误。

Appium

我还尝试使用Appium测试我的查询。我的想法是通过Appium启动我的应用程序,然后运行一些测试代码,而不让Appium单击任何按钮。例如。插入一些数据并检查它是否正确插入 - 测试方法中的所有数据。为此,我需要一个运行Activity的实例(android.app.Activity)。据我所知,有一个名为AppiumDriver.getCurrentActivity()的方法,但它只返回Activity的名称作为字符串,似乎没有办法检索android.app.Activity的实例。

我正在寻找一个答案,详细解释如何在Android Studio 1.0 Release Candidate 2中设置所需的测试工具(Appium,Robolectric或任何其他工具)(在撰写本文时)并且至少有一个测试通过查询Android上Dropbox的Datastore API 3.1.1版。

0 个答案:

没有答案