Как я могу автоматически сгенерировать фиктивный объект данных для ответа на модернизацию? - PullRequest
2 голосов
/ 21 марта 2019

Я новичок в написании тестового кода в качестве разработчика Android.Я использую Kotlin и Retrofit в своем приложении для Android.

У меня есть интерфейс для модификации, как показано ниже:

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

Ответ "TmdbMovieResp".

И мойкод теста:

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

Это означает, что я должен сделать «mockMovieResp».Но в «TmdbMovieResp» слишком много переменных-членов.Я могу сделать это, но это слишком скучно!И в этом случае это всего лишь один тест.

Если у меня есть больше методов и типов ответов, я должен снова и снова выполнять аналогичную задачу!

Есть ли какое-нибудь классное решение?

Ответы [ 3 ]

0 голосов
/ 27 марта 2019

Здесь другой подход.Вы можете использовать https://github.com/andrzejchm/RESTMock

Подробнее по ссылке.Использование очень просто:

    RESTMockServer.whenGET(pathContains("x/y/z/"))
            .thenReturnString("your-response-json");
0 голосов
/ 02 апреля 2019

Одна вещь, которую вы можете сделать, используя классы Model в вашем методе Test. Поскольку вы используете Retrofit, у вас должен быть какой-то конвертер, такой как Moshi, GSON для обработки ответов. Если у вас есть классы моделей, используйте эти классы для имитации ответов, как показано ниже.

val success = TmdbMovieResp() //Response Model class

Затем смоделируйте остальные вызовы API с результатом успеха, как показано ниже.

`when`(mockApi.getMovie(mockApiKey, "id")).thenReturn(Single.just(success))
0 голосов
/ 21 марта 2019

Вместо Mockito, используйте MockK для вашей насмешки, затем используйте расслабленные насмешки .

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
}

Расслабленные насмешки возвращают стандартные данные для любого значения или функции, так что вы не сможетенужно указать все эти отдельные свойства, когда они не имеют значения.

...