Sto provando a eseguire i test di unità usando Robolectric; corrono bene con Android Studio, ma gli stessi test non riescono a funzionare correttamente nella riga di comando - il che è un grosso problema, devo essere in grado di eseguirli dalla mia piattaforma di integrazione continua, non solo da un IDE.Test di Robolectric in esecuzione su Android Studio ma non sulla riga di comando
Ho il sospetto che manchi un argomento della riga di comando (ad esempio un classpath o qualcosa di simile) o che richiami l'attività sbagliata, altrimenti il test non verrebbe eseguito da Android Studio. Alcuni dettagli rilevanti; il test è simile al seguente:
@RunWith(RobolectricTestRunner.class)
@Config(manifest = "app/src/main/AndroidManifest.xml", resourceDir = "res", emulateSdk = 19)
public class SplashActivityTest {
@Test
public void testActivity() {
SplashActivity splashActivity = new SplashActivity();
String appName = splashActivity.getString(R.string.app_name); // HERE, line 20
assertEquals(appName, "App");
}
}
Come accennato in precedenza, funziona benissimo in Android Studio (facendo clic destro sul file di test e selezionando Run 'SplashActivityTest'
), ma quando si esegue dalla riga di comando non riesce nella linea contrassegnata con HERE
, con la seguente analisi dello stack:
android.content.res.Resources$NotFoundException: unknown resource 2131492893
at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:309)
at org.robolectric.shadows.ShadowAssetManager.getResourceText(ShadowAssetManager.java:69)
at android.content.res.AssetManager.getResourceText(AssetManager.java)
at android.content.res.Resources.getText(Resources.java:240)
at org.robolectric.shadows.ShadowResources.getText(ShadowResources.java:361)
at android.content.res.Resources.getText(Resources.java)
at android.content.res.Resources.getString(Resources.java:330)
at org.robolectric.shadows.ShadowContext.getString(ShadowContext.java:39)
at org.robolectric.shadows.ShadowContextWrapper.getString(ShadowContextWrapper.java:69)
at android.content.Context.getString(Context.java)
at path.to.myApp.activities.SplashActivityTest.testActivity(SplashActivityTest.java:20)
// ... and so on ...
sto usando questo per eseguire dalla riga di comando (si noti che qui e in Android Studio che sto utilizzando l'involucro Gradle):
project-root$ ./gradlew test --continue
anche: sto usando Android Studio 1.1.0
, versione Gradle è 2.3
, la versione di Robolectric è 3.0-SNAPSHOT
e la versione plug-in Gradle di Robolectric è 1.0.1
Oscar, si può eseguire con l'opzione '--debug'. Mi aspetto che vedrai il messaggio relativo al problema per trovare il file manifest e utilizzando quello predefinito –
@EugenMartynov Sei sulla strada giusta, ottengo questo sulla console: 'ATTENZIONE: nessun file manifest trovato su ./app/src/ principale/AndroidManifest.xml. Ritornando alle sole risorse del sistema operativo Android. Puoi elaborare? –