怎样在 go 单元测试中应用 mock 和 stub 模拟依存关系:mock:建立模拟依存关系的完整完成,并预定义对特定输入回应行为。stub:建立依存关系的精简版本,仅界定特殊输入预定义导出。实战案例:应用 mock:预定义依存关系(myinterface)在一定键入(a)中的行为,并对启用进行验证。应用 stub:立即界定依存关系(myinterface)在一定键入(a)中的导出,不用建立详细完成。
zvvq
内容来自samhan666
怎样在 Go 单元测试中应用 Mock 和 Stub 模拟依存关系
在单元测试中,模拟依存关系针对防护测试代码与实际完成至关重要。Go 语言带来了几种方法来模拟依存关系,包含 Mock 和 Stub。
Mock 本文来自zvvq
Mock 是一种模拟依存关系的完整完成。它允许你预定义依存关系回应特殊输入行为。你可以使用以下步骤建立 Mock:
zvvq
type MyInterfaceinterface{ zvvq.cn
MethodA(aint)int
}
内容来自samhan666
typeMyMockstruct{ 本文来自zvvq
MethodACalledCountint 内容来自zvvq,别采集哟
MethodAResultint
}
本文来自zvvq
func(mMyMock)MethodA(aint)int{
zvvq好,好zvvq
m.MethodACalledCount++ copyright zvvq
returnm.MethodAResult
}
Stub
Stub是 Mock 的一个更简单的版本。它只定义了特殊输入预定义导出,且不提供完整的完成。你可以使用以下步骤建立 Stub:
type MyInterfaceinterface{
zvvq.cn
MethodA(aint)int
}
zvvq.cn
typeMyStubstruct{
Aint
copyright zvvq
Resultint
zvvq好,好zvvq
}
func(sMyStub)MethodA(aint)int{
内容来自samhan
returns.Result
内容来自samhan
}
实战案例 copyright zvvq
假定你有一个函数 MyFunction,它启用依存关系 MyInterface.MethodA: copyright zvvq
func MyFunction(aint,myInterface MyInterface)int{
returna+myInterface.MethodA(a)
zvvq
}
为了测试 MyFunction,你可以使用 Mock 或 Stub 来模拟 MyInterface: 本文来自zvvq
应用 Mock:
funcTestMyFunction_Mock(ttesting.T){ 内容来自zvvq
mock:=&MyMock{} 内容来自zvvq
mock.MethodAResult=10
内容来自zvvq,别采集哟
result:= MyFunction(5, mock)
zvvq好,好zvvq
ifresult!=15{ 内容来自samhan
t.Errorf("Expected15,got%d",result) 本文来自zvvq
} 本文来自zvvq
} 内容来自zvvq
应用 Stub:
内容来自samhan
funcTestMyFunction_Stub(ttesting.T){
stub:=MyStub{A:5,Result:10} zvvq好,好zvvq
result:= MyFunction(5, stub) 内容来自zvvq
ifresult!=15{ 内容来自samhan666
t.Errorf("Expected15,got%d",result)
copyright zvvq
}
zvvq
}
以上就是怎么使用 mock 和 stub 在golang单元测试中模拟依存关系?的详细内容,大量请关注其他类似文章! 本文来自zvvq