在我的活动中,我获得了onCreate()
的帐户:
public void MyActivity extends Activity{
...
private Account[] accounts;
@Override
protected void onCreate(){
accounts = AccountManager.get(this).getAccounts();
}
...
}
现在,我在测试项目中MyActivity
单元测试:
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
}
...
}
在我上面的测试用例中,我想使用一些假帐户,我如何模拟这些帐户以便AccountManager.get(this).getAccounts();
返回我被测试项目中的那些模拟帐户?
试试这段代码:
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);
}
}