我正在实施一个由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
}
答案 0 :(得分:1)
模拟是此类测试的常用方法,因此golang/mock
例如具有 mockgen
命令以生成的原因em>测试代码。
mockgen
具有两种操作模式:源和反射。
- 源模式从源文件生成模拟接口。
通过使用-source
标志启用它。
在此模式下可能有用的其他标志是-imports
和-aux_files
。示例:
mockgen -source=foo.go [other options]
- 反映模式通过构建程序来生成模拟界面 使用反射来了解界面。
可以通过传递两个非标记参数来启用它:导入路径和 逗号分隔的符号列表。示例:
mockgen database/sql/driver Conn,Driver