问题
In my Activity, I get accounts in onCreate()
:
public void MyActivity extends Activity{
...
private Account[] accounts;
@Override
protected void onCreate(){
accounts = AccountManager.get(this).getAccounts();
}
...
}
Now, I am unit testing MyActivity
in test project:
public class MyActivityTest extends ActivityInstrumentationTestCase2<MyActivity> {
...
@Override
protected void setUp() throws Exception{
super.setUp();
//How to mock up the accounts in system so that some fake accounts could be used
}
...
}
In my above test case, I would like to use some fake accounts, how could I mock up the accounts so that AccountManager.get(this).getAccounts();
returns those mocked accounts in my project under test?
回答1:
Try this code:
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(AccountManager.class)
public class MyActivityTest extends ActivityInstrumentationTestCase2<MyActivity> {
{
@Mock
public MyActivity myActivity;
@Mock
AccountManager accountManager;
@Before
public void setUp() throws Exception{
MockitoAnnotations.initMocks(this);
}
@Test
public void mocking() {
mockStatic(AccountManager.class);
when(AccountManager.get(any(MyActivity.class))).thenReturn(accountManager);
when(accountManager.getAccounts()).thenReturn(new Account[] {});
MyActivity activity = new MyActivity();
activity.onCreate();
assertEquals(0, activity.getAccounts().length);
}
@Test
public void withoutMocking() {
MyActivity activity = new MyActivity();
activity.onCreate();
assertEquals(2, activity.getAccounts().length);
}
}
来源:https://stackoverflow.com/questions/19289770/mock-up-account-in-activityinstrumentationtestcase2