亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

監聽調用 Golang 中另一個結構使用的結構函數

監聽調用 Golang 中另一個結構使用的結構函數

Go
小唯快跑啊 2023-03-29 15:23:46
所以我是 Golang 中模擬結構和函數的初學者。我基本上想檢查是否已為單元測試目的調用了一個函數。這是代碼:type A struct { }func (a *A) Foo (){}type B struct {     a *A }func (b* B) Bar () {     a.Foo() }我基本上想檢查在調用 Bar 時是否確實調用了 Foo我知道有一些可用于 Golang 的模擬框架,但在測試現有結構和結構方法時它們非常復雜
查看完整描述

1 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

如果你想測試B,看看它是否真的調用了A的Foo函數,你需要模擬出A對象。由于您要檢查的函數是Foo,只需創建一個僅包含該函數的簡單Fooer接口(這就是您在 Go 中所稱的函數加上 'er')。將 B 對 A 的引用替換為對 Fooer 的引用,就可以了。我在 Go Playground 上根據您的代碼創建了一個小示例:

package main


import "testing"


type A struct {

}


func (a *A) Foo() {}


type Fooer interface {

? ? Foo()

}


type B struct {

? ? a Fooer

}


func (b *B) Bar() {

? ? b.a.Foo()

}


func main() {

? ? var a A

? ? var b B

? ? b.a = &a

? ? b.Bar()

}


// in your test:


type mockFooer struct {

? ? fooCalls int

}


func (f *mockFooer) Foo() {

? ? f.fooCalls++

}


func Test(t *testing.T) {

? ? var mock mockFooer

? ? var bUnderTest B

? ? bUnderTest.a = &mock

? ? bUnderTest.Bar()

? ? if mock.fooCalls != 1 {

? ? ? ? t.Error("Foo not called")

? ? }

}


查看完整回答
反對 回復 2023-03-29
  • 1 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號