2015-04-13 2 views
5

Я новичок в тестировании на Android-модуле и задавался вопросом, как я могу издеваться над контекстом, если я хочу, чтобы модуль тестировал getSomething() ниже.Android Unit Test: как насмехаться с контекстом Android

Большое спасибо!

public class Provider { 
private final String packageName; 
public Provider(Context context) { 
    packageName = context.getPackageName(); 
} 


public Data getSomething() { 
    return get(packageName); 
} 

private Data get(String packageName) { 
// return something here based on the packageName 

} 

} 

Я попытался

@Before 
    public void setUp() throws Exception { 
     provider = new Provider(mock(Context.class)); 
    } 

    @Test 
    public void DoSomethingTest() { 
     final Data data = provider.getSomething(); 
     assertThat(data).isNotNull(); 
    } 

Но я получил ошибку ниже: java.lang.RuntimeException: Сто! на android.content.Context. (Context.java:4) в android.content.ContextWrapper. (ContextWrapper.java:5)

+0

Это не единичный тест UI, а функциональный тест –

ответ

2

Вы называете getPackageName(); на Context -mock. Чтобы добиться этого, вам нужно высмеять метод, подобный:

Mockito.when(mock.getPackageName()).thenReturn("myPackage"); 

Но это делает ваш тест почти бесполезным. Но, думая об этом, это не тест, который я бы написал, потому что (при условии, что он работает так, как вы его ожидаете) он просто проверяет метод framework getPackageName(). В ваших тестах вы должны проверить свой код или более конкретно ваши алгоритмы, а не удачный вызов методов.

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