Android Studio 3.4
我有以下测试方法.基本上,这个测试做的是发出一个请求,它将返回一个LoginResponseEntity,它将被映射并返回一个Single< LoginResponse>
override fun loginUserPost(username: String, password: String, uniqueIdentifier: String, devicetoken: String, apiToken: String) : Single<LoginResponse> {
val loginRequestEntity = LoginRequestEntity(username, password, uniqueIdentifier, devicetoken)
return loginAPIService.loginUserPost(loginRequestEntity, apiToken)
.map {
loginResponseDomainMapper.map(it)
}
}
我编写的测试用例有效,但我认为这并没有完全测试这种方法.
@Test
fun `should return LoginResponse`() {
val loginRequestEntity = LoginRequestEntity("username", "password", "uniqueidentifier", "devicetoken")
val loginResponse = LoginResponse("token", createuser(), emptyList(), emptyList())
val loginResponseEntity = LoginResponseEntity("token", createuserEntity(), emptyList(), emptyList())
whenever(loginAPIService.loginUserPost(loginRequestEntity, "apitoken")).thenReturn(Single.just(loginResponseEntity))
loginServiceImp.loginUserPost("username", "password", "uniqueidentifier", "devicetoken", "apitoken")
.test()
.assertValue(loginResponse)
verify(loginAPIService).loginUserPost(loginRequestEntity, "apitoken")
}
private fun createuser() =
User(
"id",
"email",
"firstname",
"lastname",
"phone",
"address",
"dob",
"customer",
listof("enterpriseids"),
listof("vendorids"))
private fun createuserEntity() =
UserEntity(
"id",
"email",
"firstname",
"lastname",
"phone",
"address",
"dob",
"customer",
listof("enterpriseids"),
listof("vendorids"))
}
我还能做些什么来测试这种方法.我应该测试.map {loginResponseDomainMapper.map(it)这个方法的一部分吗?
解决方法:
这是一个非常小的方法,不包含很多要测试的东西.两个外部依赖项(loginAPIService和loginResponseDomainMapper)减少了要测试的内容.
所以,
1)loginResponseDomainMapper不是测试方法的一部分,也应该被模拟.
2)你必须明白,这里应该测试什么.
>首先:检查LoginRequestEntity是否已正确构造并传递给loginUserPost方法.这是通过验证(loginAPIService).loginUserPost(loginRequestEntity,“apitoken”)调用来完成的.此外,您可以使用ArgumentCaptor
.
>第二:loginUserPost方法的输出正确传递给loginResponseDomainMapper.map方法.这可以通过之前的额外验证调用来完成.
>第三:正确返回map方法的输出.这是通过assertValue调用完成的.
因此,您只是想验证数据流是否正确,并且在外星人执行期间没有修改任何内容.
3)负面测试.也有很多事情可能出错.如果loginUserPost没有@NotNull注释,则最好处理此函数的null结果.
另外,如果请求不正确怎么办?密码错了,或apitoken已过期?我相信这不会导致悲惨的后果,但你应该对此有所了解.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。