ZVVQ代理分享网

如何使用 mock 和 stub 在 golang 单元测试中模拟依赖

作者:zvvq博客网
导读如何在 go 单元测试中使用 mock 和 stub 模拟依赖关系:mock:创建模拟依赖关系的完整实现,并预定义对特定输入的响应行为。stub:创建依赖关系的精简版本,仅定义特定输入的预定义输

怎样在 go 单元测试中应用 mock 和 stub 模拟依存关系:mock:建立模拟依存关系的完整完成,并预定义对特定输入回应行为。stub:建立依存关系的精简版本,仅界定特殊输入预定义导出。实战案例 :应用 mock:预定义依存关系(myinterface)在一定键入(a)中的行为,并对启用进行验证。应用 stub:立即界定依存关系(myinterface)在一定键入(a)中的导出,不用建立详细完成。

怎样在 Go 单元测试中应用 Mock 和 Stub 模拟依存关系

在单元测试中,模拟依存关系针对防护测试代码与实际完成至关重要。Go 语言带来了几种方法来模拟依存关系,包含 Mock 和 Stub。

Mock

Mock 是一种模拟依存关系的完整完成。它允许你预定义依存关系回应特殊输入行为。你可以使用以下步骤建立 Mock:

type MyInterfaceinterface{

MethodA(aint)int

}

typeMyMockstruct{

MethodACalledCountint

MethodAResultint

}

func(mMyMock)MethodA(aint)int{

m.MethodACalledCount++

returnm.MethodAResult

}

Stub

Stub是 Mock 的一个更简单的版本。它只定义了特殊输入预定义导出,且不提供完整的完成。你可以使用以下步骤建立 Stub:

type MyInterfaceinterface{

MethodA(aint)int

}

typeMyStubstruct{

Aint

Resultint

}

func(sMyStub)MethodA(aint)int{

returns.Result

}

实战案例

假定你有一个函数 MyFunction,它启用依存关系 MyInterface.MethodA:

func MyFunction(aint,myInterface MyInterface)int{

returna+myInterface.MethodA(a)

}

为了测试 MyFunction,你可以使用 Mock 或 Stub 来模拟 MyInterface:

应用 Mock:

funcTestMyFunction_Mock(ttesting.T){

mock:=&MyMock{}

mock.MethodAResult=10

result:= MyFunction(5, mock)

ifresult!=15{

t.Errorf("Expected15,got%d",result)

}

}

应用 Stub:

funcTestMyFunction_Stub(ttesting.T){

stub:=MyStub{A:5,Result:10}

result:= MyFunction(5, stub)

ifresult!=15{

t.Errorf("Expected15,got%d",result)

}

}

以上就是怎么使用 mock 和 stub 在golang单元测试中模拟依存关系?的详细内容,大量请关注其他类似文章!