github.com/tencent/goom@v1.0.1/guard.go (about) 1 // Package mocker 定义了 mock 的外层用户使用 API 定义, 包括函数、方法、接口、未导出函数(或方法的)的 Mocker 的实现。 2 // 当前文件实现了 mock 守卫能力, 3 // 不同类型的 Mocker 具备不一样的 Apply、Cancel 具体行为,本 MockGuard 抽象了统一各类 Mocker 的 Guard, 4 // 以供 BaseMocker 使用其接口类 MockGuard 的 Apply、Cancel 方法。 5 package mocker 6 7 import ( 8 "github.com/tencent/goom/internal/iface" 9 "github.com/tencent/goom/internal/patch" 10 ) 11 12 // MockGuard Mock 守卫 13 // 负责 Mock 应用和取消 14 type MockGuard interface { 15 // Apply 应用 Mock 16 Apply() 17 // Cancel 取消 Mock 18 Cancel() 19 } 20 21 // iFaceMockGuard 接口 Mock 守卫 22 type iFaceMockGuard struct { 23 ctx *iface.IContext 24 } 25 26 // newIFaceMockGuard 创建 iFaceMockGuard 27 func newIFaceMockGuard(ctx *iface.IContext) *iFaceMockGuard { 28 return &iFaceMockGuard{ctx: ctx} 29 } 30 31 // Apply 应用 mock 32 func (i *iFaceMockGuard) Apply() { 33 // 无需操作 34 } 35 36 // Cancel 取消 mock 37 func (i *iFaceMockGuard) Cancel() { 38 i.ctx.Cancel() 39 } 40 41 // patchMockGuard Patch 类型的 Mock 守卫 42 type patchMockGuard struct { 43 patchGuard *patch.Guard 44 } 45 46 // newPatchMockGuard 创建 patchMockGuard 47 func newPatchMockGuard(patchGuard *patch.Guard) *patchMockGuard { 48 return &patchMockGuard{patchGuard: patchGuard} 49 } 50 51 // Apply 应用 mock 52 func (p *patchMockGuard) Apply() { 53 p.patchGuard.Apply() 54 } 55 56 // Cancel 取消 mock 57 func (p *patchMockGuard) Cancel() { 58 p.patchGuard.UnpatchWithLock() 59 }