2015-07-06 3 views
0

Может ли кто-нибудь сказать мне, почему этот тест терпит неудачу и/или как запустить тест?Простой тест Mockito на Android не работает

Тест проходит корректно до последнего утверждения.

@RunWith(MockitoJUnitRunner.class) 
public class AccountHelpTest { 

    @Mock 
    AccountManager accountManager; 

    public class AccountHelp { 
     public AccountManager accountManager; 
     public Account[] getAccounts(String type) { 
      return accountManager.getAccountsByType(type); 
     } 
    } 

    @Test 
    public void account() { 
     AccountHelp ah = new AccountHelp(); 
     ah.accountManager = accountManager; 

     when(accountManager.getAccountsByType(anyString())).thenReturn(new Account[]{new Account("name", "type")}); 

     Account[] types = ah.getAccounts("type"); 

     Assert.assertNotNull(types); 

     Assert.assertEquals(1, types.length); 

     Assert.assertEquals("name", types[0].name); 
    } 
} 

Я мог бы разбить его на эту проблему:

Account account = new Account("name", "test"); 
Assert.assertEquals("name", account.name); 

Это провал! (его тест JUnit4, а не тест InstrumentTest)

+0

Покажите свой класс Account. –

+0

Это класс учетной записи Android (http://developer.android.com/reference/android/accounts/Account.html) Вот код: http://grepcode.com/file/repository.grepcode.com/ java/ext/com.google.android/android/5.1.0_r1/android/accounts/Account.java # Учетная запись – andre

+0

Да, я вижу это сейчас –

ответ

0

Оказалось, что Android Studio provides a special android.jar для тестирования, что позволяет работать Mockito. Все классы в этой банке - это какие-то фиктивные классы, из-за которых тест терпит неудачу.

В качестве решения (в зависимости от того, что вы хотите проверить) вы можете просто создать свою собственную реализацию классов, которые хотите использовать. В моем классе было бы что-то вроде этого:

package android.accounts; 

public class Account { 
    public final String type; 
    public final String name; 

    public Account(String name, String type) { 
     this.name = name; 
     this.type = type; 
    } 
} 

после создания этого и снова выполнения тестов, тест успеха.

0

Как сказано в Unicate, Android Studio предоставляет android.jar, в котором все методы являются заглушками. Robolectric сделан для того, чтобы справиться с этим, создав рабочие классы, которые заменяют встроенные в Android блоки. Они заменяют ShadowAccountManager на AccountManager.

Лично я найти документацию для своей новой версии будет удручающе скудны, но, возможно, у вас будет больше удачи, чем я

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