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  }