我有这样的UserRepo:
type users struct {
*gorm.DB
}
func NewMySqlUsersRepository(db *gorm.DB) repository.IUsers {
return &users{
DB: db,
}
}
相应方法实现
func (r *users) Save(user *domain.User) (*domain.User, *errors.RestErr) {
err := r.DB.Model(&domain.User{}).Create(&user).Error
if err != nil {
logger.Error("error occurred when create user", err)
return nil, errors.NewInternalServerError(errors.ErrSomethingWentWrong)
}
return user, nil
}
对于数据库模拟,我使用sqlmock。但是,如何在单元测试中模拟这种方法呢?在Gorm中,如何模拟其他数据库查询?
发布于 2021-07-19 05:28:29
嘲笑围棋是关于围棋接口的。您必须为存储库创建一个接口,并实现interface方法。
type interface IUserRepository{
save(user *UserModel) (*userModel, Err)
}
现在,您需要做的就是与用户结构一起创建一个模拟结构。这两个结构都将实现IUserRepository。您还可能希望使用流行的模拟/测试框架(如去-模拟或作证 )来创建模拟。
现在,您必须实现一个工厂方法,这样它将根据条件返回mockStruct。您可以使用上下文、env变量或任何其他方式注入条件变量。
func NewMySqlUsersRepositoryFactory(ctx context.Context, env string, db *gorm.DB) repository.IUsers {
if env == "test" {
// This is a mocked struct ...
return mock.MockUsers{}
}
// This is a actual struct...
return &users{
DB: db,
}
}
https://stackoverflow.com/questions/68439982
复制相似问题