2013-10-10 2 views
4

В моей деятельности, я получаю счета в onCreate():Mock в ActivityInstrumentationTestCase2

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(); возвращал эти издевавшиеся счета в моем тестируемом проекте?

+0

Я мог бы также использовать __really__ ответ на это так долго, как ответ не только догадка, такие как – Phlip

ответ

0

Попробуйте этот код: - «бросить Mockito на него»

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); 
    } 

} 
+0

Как вам удалось запустить PowerMock в Android? Насколько я знаю, это невозможно для Dalvik Runtime – mapodev

Смежные вопросы