我想将自己的查询调用(CRUD)单元测试到Datastore API on Android。
我尝试使用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单击任何按钮。例如。插入一些数据并检查它是否正确插入 - 测试方法中的所有数据。为此,我需要一个运行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版。