2
votes

Comment puis-je générer automatiquement un objet de données factice pour une réponse de mise à niveau?

Je suis novice dans l'écriture d'un code de test en tant que développeur Android. J'utilise Kotlin et Retrofit dans mon application Android.

J'ai une interface de retrofit comme ci-dessous:

`when`(mockApi.getMovie(mockApiKey, "id")).thenReturn(Single.just(mockMovieResp))

La réponse est "TmdbMovieResp".

Et mon code de test est:

@GET("/3/movie/{movieId}")
fun getMovie(@Query("api_key") apiKey: String, @Path("movieId") movieId: String): Single<TmdbMovieResp>

Cela signifie que je devrais faire le "mockMovieResp". Mais le "TmdbMovieResp" a trop de variables membres. Je peux y arriver, mais c'est trop ennuyeux! Et dans ce cas, il ne s'agit que d'un seul test.

Si j'ai plus de méthodes et de types de réponses, je devrais faire une tâche similaire encore et encore!

Y a-t-il une solution intéressante? P >


1 commentaires

Il n'y a aucun moyen que je sache, laisse voir si les autres en savent


3 Réponses :


0
votes

Au lieu de Mockito, utilisez MockK pour vos moqueries, puis utilisez moquettes décontractées .

class MyClass {
  fun foo() : ComplexObject { ... }
}

@Test
fun `test foo`() {
  val myClass = spyk(MyClass())
  val complex : ComplexObject = mockk(relaxed = true)

  every { myClass.foo() } returns complex

  assertEquals(complex, myClass.foo())

  println(complex.someIntProperty) // prints 1
}

Les simulations assouplies renvoient des données prédéfinies pour n'importe quelle valeur ou fonction, de sorte que vous n'avez pas besoin de spécifier toutes ces propriétés individuelles lorsqu'elles n'ont pas d'importance.


0 commentaires

0
votes

Voici une approche différente. Vous pouvez utiliser https://github.com/andrzejchm/RESTMock

Plus d'informations via le lien . L'utilisation est très simple:

    RESTMockServer.whenGET(pathContains("x/y/z/"))
            .thenReturnString("your-response-json");


0 commentaires

0
votes

Une chose que vous pouvez faire en utilisant vos classes Model dans votre méthode Test. Comme vous utilisez Retrofit, vous devez avoir un convertisseur comme Moshi, GSON pour la gestion des réponses. Si vous avez des classes de modèle, utilisez ces classes pour vous moquer des réponses comme ci-dessous.

`when`(mockApi.getMovie(mockApiKey, "id")).thenReturn(Single.just(success))

Puis simulez le reste de l'appel de l'API avec le résultat de réussite comme ci-dessous.

val success = TmdbMovieResp() //Response Model class


0 commentaires