这样的单元测试有什么好处?
What is the gain of a unit test like this?
一个看不懂有用的测试用例(摘自Plaid):
这里有什么意义?通过这一行,您已经告诉您的框架在调用 getUsers()
方法时 return 一个预定义的结果,然后您验证它实际上 return 是一个预定义的结果。
whenever(service.getUsers("111,222")).thenReturn(Response.success(users))
@Test
fun getUsers_withSuccess() = runBlocking {
// Given that the service responds with success
whenever(service.getUsers("111,222")).thenReturn(Response.success(users))
// When requesting the users
val result = dataSource.getUsers(listOf(111L, 222L))
// Then there's one request to the service
verify(service).getUsers("111,222")
// Then the correct set of users is returned
assertEquals(Result.Success(users), result)
}
我对这个测试用例的看法是这样的:
@Test
fun getUsers_withSuccess() = runBlocking {
val a = 4;
assertEquals(a, 4)
}
这两个测试用例有何不同以及 Plaid 的用例如何测试任何有用的东西,我的意思是该测试用例可以捕获什么错误?我错过了这个测试用例中的大图吗?
注意: 我对 whenever {something} return
模式的看法是,它本来是在极少数情况下使用的,但现在却被滥用了
在这种情况下,测试的是 dataSource
的 getUsers
方法,而不是 service
的 getUsers
方法。
假设 dataSource.getUsers
方法有副作用 - 它在后台调用 service.getUsers
。
此测试检查 4 件事:
- 调用
service.getUsers
实际上发生在我们调用 dataSource.getUsers
时
- 只发生一次
dataSource.getUsers
正确地将其输入参数转换为 service.getUsers
的输入参数(listOf(111L, 222L)
转换为 "111,222"
)
- 值 return 来自这个内部调用的值不会被丢弃,而是正确地用于产生整体 return 值(在这种情况下它只是 returned 原样)
一个看不懂有用的测试用例(摘自Plaid):
这里有什么意义?通过这一行,您已经告诉您的框架在调用 getUsers()
方法时 return 一个预定义的结果,然后您验证它实际上 return 是一个预定义的结果。
whenever(service.getUsers("111,222")).thenReturn(Response.success(users))
@Test
fun getUsers_withSuccess() = runBlocking {
// Given that the service responds with success
whenever(service.getUsers("111,222")).thenReturn(Response.success(users))
// When requesting the users
val result = dataSource.getUsers(listOf(111L, 222L))
// Then there's one request to the service
verify(service).getUsers("111,222")
// Then the correct set of users is returned
assertEquals(Result.Success(users), result)
}
我对这个测试用例的看法是这样的:
@Test
fun getUsers_withSuccess() = runBlocking {
val a = 4;
assertEquals(a, 4)
}
这两个测试用例有何不同以及 Plaid 的用例如何测试任何有用的东西,我的意思是该测试用例可以捕获什么错误?我错过了这个测试用例中的大图吗?
注意: 我对 whenever {something} return
模式的看法是,它本来是在极少数情况下使用的,但现在却被滥用了
在这种情况下,测试的是 dataSource
的 getUsers
方法,而不是 service
的 getUsers
方法。
假设 dataSource.getUsers
方法有副作用 - 它在后台调用 service.getUsers
。
此测试检查 4 件事:
- 调用
service.getUsers
实际上发生在我们调用dataSource.getUsers
时
- 只发生一次
dataSource.getUsers
正确地将其输入参数转换为service.getUsers
的输入参数(listOf(111L, 222L)
转换为"111,222"
)- 值 return 来自这个内部调用的值不会被丢弃,而是正确地用于产生整体 return 值(在这种情况下它只是 returned 原样)