我正在执行一个由leveldb(https://github.com/syndtr/goleveldb)支持的存储器。我是新手,正尝试找出如何在下面的代码中获得条件的测试覆盖率,其中perr!= nil。我可以测试自己的错误,但是我无法弄清楚如何可靠地获取leveldb的Put方法以返回错误。模拟数据库只是为了在少数情况下提高测试覆盖率,这似乎是很多工作,却没有太多回报。在这里嘲笑leveldb是我唯一的真实选择吗?如果是这样,建议使用什么模拟框架?如果还有另一种方式,那是什么?
if err == leveldb.ErrNotFound {
store.Lock()
perr := store.ldb.Put(itob(p.ID), p.ToBytes(), nil)
if perr != nil {
store.Unlock()
return &StorerError{
Message: fmt.Sprintf("leveldb put error could not create puppy %d : %s", p.ID, perr),
Code: 501,
}
}
store.Unlock()
return nil
}
模拟是这种测试的通常选择的方法,这就是为什么golang/mock
例如有mockgen
命令生成测试代码的原因。
mockgen
有两种操作模式:源和反射。
- 源模式从源文件生成模拟接口。
通过使用-source
标志启用它。
在此模式下可能有用的其他标志是-imports
和-aux_files
。例:
mockgen -source=foo.go [other options]
- 反射模式通过构建使用反射来了解接口的程序来生成模拟接口。
通过传递两个非标志参数来启用它:导入路径和逗号分隔的符号列表。例:
mockgen database/sql/driver Conn,Driver
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句