web-dev-qa-db-fra.com

Android test unitaire non moqué

J'ai suivi ce guide https://sites.google.com/a/Android.com/tools/tech-docs/unit-testing-support mais je suis coincé avec cette erreur:

junit.framework.AssertionFailedError: Exception in constructor: testSaveJson (Java.lang.RuntimeException: Method put in org.json.JSONObject not mocked. See https://sites.google.com/a/Android.com/tools/tech-docs/unit-testing-support for details.

J'ai modifié par Gradle build comme le dit le guide mais cela ne fait aucune différence

 testOptions { 
    unitTests.returnDefaultValues = true
  }
42
user1634451

JSON est fourni avec le Android SDK, donc vous allez juste frapper un talon. Vous pouvez insérer un pot JSON, qui fournira de vrais objets à utiliser.

Pour ce faire, vous devrez l'ajouter à votre build.gradle:

testImplementation 'org.json:json:20140107'

Alternativement, vous pouvez télécharger et inclure le pot.

testCompile files('libs/json.jar')

Notez que la dernière version de JSON est conçue pour Java 8, vous devrez donc saisir 20140107

88
Ben Pearson

Je pense que vous essayez d'exécuter des tests avec org.json.JSONObject qui fait partie de Android Framework sur pur jUnit.

Depuis les documents:

Le fichier Android.jar utilisé pour exécuter les tests unitaires ne contient aucun code réel - fourni par l'image système Android sur les appareils réels. À la place, toutes les méthodes lèvent des exceptions (par défaut) .

Nous sommes conscients que le comportement par défaut est problématique lors de l'utilisation de classes comme Log ou TextUtils et évaluerons les solutions possibles dans les futures versions.

Vous devez émuler Android environnement que vous pouvez utiliser à cet effet Robolectric ou InstrumentationTests

3
ar-g