我在使用 Mockito 在我的聊天应用程序中工作时遇到问题,我正在尝试模拟一个将用户 ID 作为字符串并返回该用户的所有对话的存储库。我很难摆脱NullPointerException
这是我的存储库特征:
trait UserRepository {
val getConversations: (String) => Option[Vector[User]]
}
这是我的服务:
class UserService(userRepository: UserRepository){
private val boolToNumber : (Boolean) => Int = (bool) => ... not useful here
private val countToBool : (Int) => Boolean = (int) => ... not useful here
val getParticipations: (String) => Option[Vector[User]] = (name) => {
userRepository.getConversations(name) match {
... some implementation
}
}
和我的测试
// init
val userRepository = mock[UserRepository]
// setup
when(userRepository.getConversations("Smith")) thenReturn (
Some(
Vector(
User("Smith", true, true, ConversationKey("Smith", "Smith and O'Connell chatroom")),
User("Smith", false, true, ConversationKey("Smith", "Smith and O'Connell chatroom"))
)
)
)
val userService : UserService = new UserService(userRepository)
// run
val actual = userService.getParticipations("Smith")
// verify
actual mustBe Vector(User("Smith", false, true, ConversationKey("Smith", "Smith and O'Connell chatroom")))
到目前为止我尝试过:
- 打印
- 在测试中的每个操作之后,打印 UserRepository 返回
Mock for UserRepository, hashCode: 1319190020
,但用户服务没有打印,因此它是抛出 NullPointerException 的人 - 通过匹配器更改"史密斯"
any[String]
,相同的错误,以及anyString
相同的错误 - 将字符串包装在名为 StringValue 的类中,相同的错误 Mockito匹配器
将val
函数更改为def
函数。
我不太确定为什么会这样,但是 mockito 是一个 java 库,所以我并不感到惊讶,它不能很好地处理 scala 函数值,而 Def 编译为与 java 方法相同的东西。