2015-04-13 13 views
5

Sono nuovo per il test di unità Android e mi chiedevo come posso prendere in giro il contesto se voglio testare l'unità getSomething() di seguito.Test di unità Android: come risolvere il contesto di Android

Grazie mille in anticipo!

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 

} 

} 

ho cercato

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

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

ma ho ottenuto l'errore sotto: java.lang.RuntimeException: Stub! a android.content.Context. (Context.java:4) a android.content.ContextWrapper. (ContextWrapper.java:5)

+0

Questo non è un test dell'unità UI ma un test funzionale –

risposta

2

ti chiamano getPackageName(); sul Context -mock. Per ottenere questo correre bisogna prendere in giro il metodo come:

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

Ma questo rende il test praticamente inutile. Ma riflettendo su questo, questo non è un test che vorrei scrivere perché (supponendo che funzioni come te lo aspetti) prova solo il metodo framework getPackageName(). Nei tuoi test dovresti testare il TUO codice o essere più specifico dei tuoi algoritmi e non il metodo di chiamata di successo.