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