如何自动生成用于改装响应的模拟数据对象?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何自动生成用于改装响应的模拟数据对象?相关的知识,希望对你有一定的参考价值。
作为android开发人员编写测试代码我是新手。我在我的Android应用程序中使用Kotlin和Retrofit。
我有一个改装界面,如下所示:
@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”有太多的成员变量。我能做到,但太无聊了!在这种情况下,它只是一个测试。
如果我有更多的方法和响应类型,我应该一次又一次地执行类似的任务!
有什么很酷的解决方案吗?
答案
这是不同的方法。你可以使用https://github.com/andrzejchm/RESTMock
更多信息链接。用法很简单:
RESTMockServer.whenGET(pathContains("x/y/z/"))
.thenReturnString("your-response-json");
另一答案
在Test方法中使用Model类可以做一件事。当你使用Retrofit时,你必须有一些像Moshi,GSON这样的转换器来进行响应处理。如果你有模型类,那么使用这些类进行响应模拟,如下所示。
val success = TmdbMovieResp() //Response Model class
然后用下面的成功结果模拟其余的api调用。
`when`(mockApi.getMovie(mockApiKey, "id")).thenReturn(Single.just(success))
另一答案
而不是Mockito,使用MockK进行嘲弄,然后使用relaxed mocks。
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
}
轻松的mockk返回任何值或函数的固定数据,因此您无需在无关紧要时指定所有这些单独的属性。
以上是关于如何自动生成用于改装响应的模拟数据对象?的主要内容,如果未能解决你的问题,请参考以下文章