2015-09-18 16 views
5

I test dell'unità non stanno funzionando con il metodo d in android.util.Log non è stato simulato ma solo quando eseguo testDebug. Se eseguire testRealizza tutto va bene e passa correttamente. Qualcuno sa perché questo sta accadendo? La stessa cosa accade quando si esegue gradle da console e Android studio.Test dell'unità Android non riuscito per il tipo di build Debug

risposta

1

Ecco una spiegazione di come ho risolto questo per riferimento futuro. Il problema con i test che funzionano nel debug ma non nel rilascio era dovuto al fatto che Log.d (e gli amici del framework Android) non erano stati correttamente derisi. Il motivo per cui funziona quando viene generato come rilascio è che la nostra registrazione era condizionata in base a questa proprietà dalla configurazione di configurazione. Fondamentalmente abbiamo if (BuildConfig.type! = "Release") Log.d (...) e dal momento che il compilatore rimuove questo blocco a causa del valore finale non viene richiamato durante il test di rilascio. Per simulare il metodo statico Log.d Ho usato PowerMock. Fare il mocking è stato facile, ma impostare Power Mock è davvero una seccatura, quindi probabilmente ci potrebbero essere dei modi migliori per farlo.

0

Acquista il collegamento "Method ... not mocked" nel sito del progetto Android Studio. Dice:

Il file android.jar che viene utilizzato per eseguire test di unità non contiene alcun codice vero e proprio - che è fornito da l'immagine del sistema Android su dispositivi reali. Invece, tutti i metodi generano eccezioni (per impostazione predefinita). Questo per assicurarsi che i test delle tue unità testino il tuo codice e non dipendano da alcun particolare comportamento della piattaforma Android (che non hai esplicitamente preso in giro, ad esempio usando Mockito). Se ciò risultasse problematico, è possibile aggiungere il frammento qui sotto al tuo build.gradle per cambiare questo comportamento:

build.gradle 
    android { 
    // ... 
    testOptions { 
     unitTests.returnDefaultValues ​​= true 
    } 
} 

Siamo consapevoli che il comportamento predefinito è problematico quando si utilizza classi come log o textutils e volontà valutare possibili soluzioni nelle versioni future.

Ho appena usato quanto sopra per eliminare l'eccezione per ora.

Problemi correlati