gpt4 book ai didi

java - 单元测试: how to pass my mock class in the read code

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:52 25 4
gpt4 key购买 nike

我在我的项目中使用hazelcast,我想对某些功能进行单元测试,但我不希望它连接到真正的hazelcast并对其执行测试,因为我创建了一个自定义模拟类,它只使用scala映射,因为在hazelcast映射中也有这是我的代码

trait UserRepository {
def getUserObj(id: String):Option[User]
def addToUserRepo(user: User)
}

class UserRepo extends UserRepository{
def getUserObj(id: String):Option[User] = {
val userMap = hcastClient.getMap[String, User]("UserMap")
val userObj = userMap.get(id)
Option(userObj)
}
def addToUserRepo(user: User) = {
val directUserMap: IMap[String, User] = hcastClient.getMap[String,User]("UserMap")
directUserMap.set(user.uuid, user)
}

在这里,我创建了一个简单的自定义模拟版本类,其功能是相同的;将其替换为 scala 映射:

class UserRepoMock extends UserRepository {
val map:Map[String,User]=Map[String,User]()
def getUserMap:Map[String,User] = {
map
}

def getUserObj(id: String):User = {
val userMap = getUserMap
val userObj = userMap.get(id)
userObj
}
def addToUserRepo(user: User) = {
val userMap = getUserMap
userMap.put(user.uuid, user)
}

class UserUtil(userRepo:UserRepo) {
def addUser(user:User):Boolean={
try{
userRepo.addToUserRepo(user)
true
}
catch {
case e:Exception=>false
}
def getUser(id:String):User={
val user=userRepo.getUserObj(id)
user
}

我想对UserUtil类的addUsergetUser方法进行单元测试
通过这样做:

class UserUtilTest extends funSpec {
val userUtil=new UserUtil(new UserRepoMock)
userUtil.addUser //perform unit test on it
userUtil.getUser //perform unit test on it
// instead of doing this val userUtil=new UserUtil(new UserRepo)
}

但是编译器不允许我这样做,我缺少一些东西,请帮助我如何实现所需的功能

这是编译器错误:

type mismatch; found : testhcastrepo.UserRepoMock required: com.repositories.UserRepo

最佳答案

嗯:你的 utils 类说:

class UserUtil(userRepo:UserRepo)

所以它需要一个UserRepo实例。

但是您将传递一个 UserRepoMock 实例。 UserRepoMock 是一个 UserRepository,就像 UserRepo 一样;但 UserRepoMock 不是 UserRepo!

可能就像将 utils 更改为一样简单

class UserUtil(userRepo:UserRepository)

表明您不想指定特定的。相反,您只需说:任何具有特征的东西都可以!

除此之外:真正的答案可能是:看看您的命名习惯。你看,这两个名字UserRepositorUserRepo;他们彼此非常“接近”;并且根本不清楚两者之间的区别是什么。如果名称更加明显,例如 UserRepositoryTraitHCastUserRepository,您可能一开始就不会犯这个错误(根据 scala 约定,不确定我的建议是“好”名称;但它们只是为了给您一个想法)。

关于java - 单元测试: how to pass my mock class in the read code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43818066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com