我正在使用 C 语言中的 Tensonflow lite API 来推断模型文件的结果,其代码跨不同函数编写在
.c
文件中。get_interpreter
:- 创建一个新的解释器现在,这一切都是 C 代码。我在 golang 中使用 golang 中的 CGo 支持来调用这个 C 函数。
Golang 函数(伪代码):
package main
import "C"
func callCApi() error {
// load data
// get_interpreter returns an interpreter of type TfLiteInterpreter*
interpreter = C.get_interpreter(param1, param2)
// run inference
// errors are returned if any during the above stages, else nil is returned
return nil
}
我想对上面的 Golang 代码进行单元测试,如何实现?
上面的C函数必须被mock;这怎么办?
我猜你想嘲笑
callCApi
。
对于没有无聊的接口抽象的模拟函数,你可以尝试
xgo
。
以下是
xgo
如何解决您的问题:
package main
import (
"context"
"fmt"
"C"
"github.com/xhd2015/xgo/runtime/core"
"github.com/xhd2015/xgo/runtime/mock"
)
func callCApi() error {
// load data
// get_interpreter returns an interpreter of type TfLiteInterpreter*
interpreter = C.get_interpreter(param1, param2)
// run inference
// errors are returned if any during the above stages, else nil is returned
return nil
}
func main() {
mock.Mock(callCApi, func(ctx context.Context, fn *core.FuncInfo, args core.Object, results core.Object) error {
// do what you like on args and results
return nil
})
// the control flow will be transferred to mock.Mock
callCApi()
}