Change test code of ChooseMapAsyncTaskTest.

This commit is contained in:
youtaol
2012-03-09 11:51:45 +08:00
parent 4fd832d4a2
commit 472d49f241
2 changed files with 116 additions and 36 deletions
@@ -75,19 +75,32 @@ public class ChooseMapAsyncTask extends AsyncTask<Void, Integer, Boolean> {
private ArrayList<String> mapIds; private ArrayList<String> mapIds;
private ArrayList<MapsMapMetadata> mapData; private ArrayList<MapsMapMetadata> mapData;
public ChooseMapAsyncTask(ChooseMapActivity activity, Account account) { public ChooseMapAsyncTask(ChooseMapActivity activity, Account account) {
this.activity = activity; this(activity, account, activity.getApplicationContext(),
this.account = account; GDataClientFactory.getGDataClient(activity
.getApplicationContext()), new MapsClient(
GDataClientFactory.getGDataClient(activity
.getApplicationContext()),
new XmlMapsGDataParserFactory(
new AndroidXmlParserFactory())));
}
context = activity.getApplicationContext(); /**
gDataClient = GDataClientFactory.getGDataClient(context); * Creates this constructor for test.
mapsClient = new MapsClient( */
gDataClient, new XmlMapsGDataParserFactory(new AndroidXmlParserFactory())); public ChooseMapAsyncTask(ChooseMapActivity activity, Account account,
Context context, GDataClient gDataClient, MapsClient mapsClient) {
this.activity = activity;
this.account = account;
canRetry = true; this.context = context;
completed = false; this.gDataClient = gDataClient;
success = false; this.mapsClient = mapsClient;
}
canRetry = true;
completed = false;
success = false;
}
/** /**
* Sets the activity associated with this AyncTask. * Sets the activity associated with this AyncTask.
@@ -15,11 +15,18 @@
*/ */
package com.google.android.apps.mytracks.io.maps; package com.google.android.apps.mytracks.io.maps;
import com.google.android.apps.mytracks.io.gdata.maps.MapsClient;
import com.google.android.apps.mytracks.io.gdata.maps.XmlMapsGDataParserFactory;
import com.google.android.common.gdata.AndroidXmlParserFactory;
import com.google.android.testing.mocking.AndroidMock; import com.google.android.testing.mocking.AndroidMock;
import com.google.android.testing.mocking.UsesMocks;
import com.google.wireless.gdata.client.GDataClient;
import android.accounts.Account; import android.accounts.Account;
import android.test.AndroidTestCase; import android.test.AndroidTestCase;
import java.util.ArrayList;
/** /**
* Tests {@link ChooseMapAsyncTask}. * Tests {@link ChooseMapAsyncTask}.
* *
@@ -29,8 +36,8 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
private ChooseMapActivity chooseMapActivityMock; private ChooseMapActivity chooseMapActivityMock;
private Account account; private Account account;
private final String ACCOUNT_NAME = "AccountName"; private static final String ACCOUNT_NAME = "AccountName";
private final String ACCOUNT_TYPE = "AccountType"; private static final String ACCOUNT_TYPE = "AccountType";
private boolean getMapsStatus = false; private boolean getMapsStatus = false;
public class ChooseMapAsyncTaskMock extends ChooseMapAsyncTask { public class ChooseMapAsyncTaskMock extends ChooseMapAsyncTask {
@@ -51,11 +58,31 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
} }
/** /**
* Tests the method {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)} * Tests {@link ChooseMapAsyncTask#execute(Void...)} and makes sure
* when the task is completed. * {@link ChooseMapActivity#showProgressDialog()} will be run.
*/
@UsesMocks({ ChooseMapActivity.class, GDataClient.class, MapsClient.class })
public void testExecute() {
chooseMapActivityMock = AndroidMock.createMock(ChooseMapActivity.class);
chooseMapActivityMock.showProgressDialog();
GDataClient gDataClient = AndroidMock.createMock(GDataClient.class);
MapsClient mapsClient = AndroidMock.createMock(MapsClient.class, gDataClient,
new XmlMapsGDataParserFactory(new AndroidXmlParserFactory()));
AndroidMock.replay(chooseMapActivityMock, gDataClient, mapsClient);
ChooseMapAsyncTask asyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account,
getContext(), gDataClient, mapsClient);
asyncTask.execute();
AndroidMock.verify(chooseMapActivityMock);
}
/**
* Tests {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)} when the
* task is completed. Makes sure it calls
* {@link ChooseMapActivity#onAsyncTaskCompleted(boolean, ArrayList, ArrayList)}
* .
*/ */
public void testSetActivity_completed() { public void testSetActivity_completed() {
createMockObjects(); setup();
chooseMapActivityMock.onAsyncTaskCompleted(false, null, null); chooseMapActivityMock.onAsyncTaskCompleted(false, null, null);
AndroidMock.replay(chooseMapActivityMock); AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account); ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account);
@@ -65,11 +92,13 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
} }
/** /**
* Tests the method {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)} * Test {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)} when the
* when the task is not completed. * task is not completed. Makes sure
* {@link ChooseMapActivity#onAsyncTaskCompleted(boolean, ArrayList, ArrayList)}
* is not invoked.
*/ */
public void testSetActivity_notCompleted() { public void testSetActivity_notCompleted() {
createMockObjects(); setup();
AndroidMock.replay(chooseMapActivityMock); AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account); ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account);
chooseMapAsyncTask.setCompleted(false); chooseMapAsyncTask.setCompleted(false);
@@ -78,23 +107,28 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
} }
/** /**
* Tests the method {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)} * Tests {@link ChooseMapAsyncTask#setActivity(ChooseMapActivity)} when the
* when the activity is null. * activity is null. Makes sure
* {@link ChooseMapActivity#onAsyncTaskCompleted(boolean, ArrayList, ArrayList)}
* is not invoked.
*/ */
public void testSetActivity_nullActivity() { public void testSetActivity_nullActivity() {
createMockObjects(); setup();
AndroidMock.replay(chooseMapActivityMock); AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account); ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account);
chooseMapAsyncTask.setCompleted(true); chooseMapAsyncTask.setCompleted(true);
chooseMapAsyncTask.setActivity(null); chooseMapAsyncTask.setActivity(null);
AndroidMock.verify(chooseMapActivityMock);
} }
/** /**
* Tests the method {@link ChooseMapAsyncTask#onPostExecute(Boolean)} when the * Tests the method {@link ChooseMapAsyncTask#onPostExecute(Boolean)} when the
* result is true. * result is true. Makes sure
* {@link ChooseMapActivity#onAsyncTaskCompleted(boolean, ArrayList, ArrayList)}
* is invoked.
*/ */
public void testOnPostExecute_trueResult() { public void testOnPostExecute_trueResult() {
createMockObjects(); setup();
chooseMapActivityMock.onAsyncTaskCompleted(true, null, null); chooseMapActivityMock.onAsyncTaskCompleted(true, null, null);
AndroidMock.replay(chooseMapActivityMock); AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account); ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account);
@@ -104,10 +138,12 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
/** /**
* Tests the method {@link ChooseMapAsyncTask#onPostExecute(Boolean)} when the * Tests the method {@link ChooseMapAsyncTask#onPostExecute(Boolean)} when the
* result is false. * result is false. Makes sure
* {@link ChooseMapActivity#onAsyncTaskCompleted(boolean, ArrayList, ArrayList)}
* is invoked.
*/ */
public void testOnPostExecute_falseResult() { public void testOnPostExecute_falseResult() {
createMockObjects(); setup();
chooseMapActivityMock.onAsyncTaskCompleted(false, null, null); chooseMapActivityMock.onAsyncTaskCompleted(false, null, null);
AndroidMock.replay(chooseMapActivityMock); AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account); ChooseMapAsyncTask chooseMapAsyncTask = new ChooseMapAsyncTask(chooseMapActivityMock, account);
@@ -116,10 +152,26 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
} }
/** /**
* Tests the method {@link ChooseMapAsyncTas#retryUpload()}. * Tests the method {@link ChooseMapAsyncTask#retryUpload()}. Make sure can
* not retry again after have retried once and failed.
*/ */
public void testRetryUpload() throws Exception { public void testRetryUpload() throws Exception {
createMockObjects(); setup();
AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTaskMock chooseMapAsyncTaskTMock = new ChooseMapAsyncTaskMock(
chooseMapActivityMock, account);
chooseMapAsyncTaskTMock.setCanRetry(false);
getMapsStatus = true;
assertFalse(chooseMapAsyncTaskTMock.retryUpload());
AndroidMock.verify(chooseMapActivityMock);
}
/**
* Tests the method {@link ChooseMapAsyncTask#retryUpload()}. Make sure can
* retry after get maps failed and never retry before.
*/
public void testRetryUpload_retryOnce() throws Exception {
setup();
AndroidMock.replay(chooseMapActivityMock); AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTaskMock chooseMapAsyncTaskTMock = new ChooseMapAsyncTaskMock( ChooseMapAsyncTaskMock chooseMapAsyncTaskTMock = new ChooseMapAsyncTaskMock(
chooseMapActivityMock, account); chooseMapActivityMock, account);
@@ -128,25 +180,40 @@ public class ChooseMapAsyncTaskTest extends AndroidTestCase {
assertFalse(chooseMapAsyncTaskTMock.retryUpload()); assertFalse(chooseMapAsyncTaskTMock.retryUpload());
// Can only retry once. // Can only retry once.
assertFalse(chooseMapAsyncTaskTMock.getCanRetry()); assertFalse(chooseMapAsyncTaskTMock.getCanRetry());
AndroidMock.verify(chooseMapActivityMock);
}
/**
* Tests the method {@link ChooseMapAsyncTask#retryUpload()}. Make sure will
* not retry after get maps successfully.
*/
public void testRetryUpload_successGetMaps() throws Exception {
setup();
AndroidMock.replay(chooseMapActivityMock);
ChooseMapAsyncTaskMock chooseMapAsyncTaskTMock = new ChooseMapAsyncTaskMock(
chooseMapActivityMock, account);
chooseMapAsyncTaskTMock.setCanRetry(true); chooseMapAsyncTaskTMock.setCanRetry(true);
getMapsStatus = true; getMapsStatus = true;
assertTrue(chooseMapAsyncTaskTMock.retryUpload()); assertTrue(chooseMapAsyncTaskTMock.retryUpload());
// Can only retry once. // Can only retry once.
assertFalse(chooseMapAsyncTaskTMock.getCanRetry()); assertFalse(chooseMapAsyncTaskTMock.getCanRetry());
chooseMapAsyncTaskTMock.setCanRetry(false);
getMapsStatus = true;
assertFalse(chooseMapAsyncTaskTMock.retryUpload());
AndroidMock.verify(chooseMapActivityMock); AndroidMock.verify(chooseMapActivityMock);
} }
/** /**
* Initials chooseMapActivityMock and account for test. * Initials setup for test.
*/ */
private void createMockObjects() { void setup() {
chooseMapActivityMock = AndroidMock.createMock(ChooseMapActivity.class); setupChooseMapActivityMock();
account = new Account(ACCOUNT_NAME, ACCOUNT_TYPE); account = new Account(ACCOUNT_NAME, ACCOUNT_TYPE);
}
/**
* Create a mock object of ChooseMapActivity.
*/
@UsesMocks(ChooseMapActivity.class)
private void setupChooseMapActivityMock() {
chooseMapActivityMock = AndroidMock.createMock(ChooseMapActivity.class);
// This is used in the constructor of ChooseMapAsyncTask. // This is used in the constructor of ChooseMapAsyncTask.
AndroidMock.expect(chooseMapActivityMock.getApplicationContext()).andReturn(getContext()); AndroidMock.expect(chooseMapActivityMock.getApplicationContext()).andReturn(getContext());
} }