unit-testing - 如何在golang中构建模拟类?

标签 unit-testing go

我正在尝试为 golang 中的单元测试构建模拟类;有谁知道这是怎么做到的吗?例如,在下面的代码片段中,我想打印 FakeMyClass.Object 的返回值。

package main

import (
    "fmt"
)

type MyClass struct {
}

func (*MyClass) Object() (int) {
    return 0
}

func (mc *MyClass) PrintInfo() {
    fmt.Printf("%v\n", mc.Object())
}

type FakeMyClass struct {
    MyClass
}

func (*FakeMyClass) Object() (int) {
    return 1
}

func main() {
    mc := &FakeMyClass{}
    mc.PrintInfo()
}

最佳答案

我更喜欢使用github.com/stretchr/testify/tree/master/mock

package main

import (
    "fmt"
    "github.com/stretchr/testify/mock"
)

type MyClass struct {
}

func (*MyClass) Object() (int) {
    return 0
}

func (mc *MyClass) PrintInfo() {
    fmt.Printf("%v\n", mc.Object())
}

type FakeMyClass struct {
    mock.Mock
}

func (fmc *FakeMyClass) Object() (int) {
    args := fmc.Called()
    return args.Int(0)
}
func (fmc *FakeMyClass) PrintInfo() {
    fmt.Printf("%v\n", fmc.Object())
}

func main() {
    mc := &FakeMyClass{}
    mc.On("Object").Return(1)
    mc.PrintInfo()
    //mc.AssertExpectations(t)
}

关于unit-testing - 如何在golang中构建模拟类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39343282/

相关文章:

java - 什么是适用于 http 的正确 java 单元测试库?

mongodb - 以数组为参数查询,如何转换为 GoLang mgo?

go - 将数据库连接存储在全局变量中

go - 为什么我从 golang 错误地运行 python 脚本

go - go 中有 "pass by reference"(C++) 吗?

c++ - 在 gmock 中使用指向带有 EXPECT_CALL 的模拟对象的指针会导致段错误或默认处理程序启动

javascript - 在 AngularJS 单元测试中断言递归 $timeout 中的 http 调用次数

python - unittest blacklist namespace 并且任何引用它的尝试都失败

concurrency - 在并行快速排序实现中使用 go 例程时性能更差

node.js - 如何在 Mocha 测试中模拟无连接