怎样在 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单元测试中模拟依存关系?的详细内容,大量请关注其他类似文章!