Moq被遺忘的功能

2021-10-06 21:58:17 字數 1721 閱讀 6596

目錄介紹

背景使用**

興趣點

給出了如何經常使用

moq以及如何改進這種工作方式的解釋。

如果您對

.net core

中的xunit

,模擬和固定裝置

(fixtures

)有一定的經驗,這將非常有幫助。此處顯示的測試是針對

.net core

編寫的,但是大多數**都可以在使用其他單元測試框架的情況下使用。如果您不熟悉固定裝置

(fixtures

),建議閱讀

這篇文章

。如果您不熟悉

moq,建議閱讀

此文章。

我們從要測試的**開始:

使用

autofixture.automoq

(nuget

軟體包在此處

)可以輕鬆進行單元測試。使用測試的安排

(arrange

)部分中的

freeze

方法建立模擬並進行驗證,並使用

verify 

方法在測試結束時進行模擬。

在兩者之間呼叫

create

方法以建立包含我們要測試的方法的例項。**如下所示:

[fact]

public async task gettest()

另外,我們可以建立乙個整合測試(而不是僅乙個單元測試),該整合測試僅解析

startup

類中設定的所有依賴項,並替換我們要模擬的單個依賴項。主要優點是我們可以獲得更好的**覆蓋率(因為

startup

類和program

類被觸發)。主要缺點是我們的隔離度較低,因此通常不會替代單元測試。可以使用

integrationfixture

(nuget

包)完成,這就是**的樣子:

[fact]

public async task gettestfreeze()

}

這段**看起來不錯,但是在兩個測試中都出錯了。我們沒有驗證是否對模擬進行了其他任何呼叫。這聽起來可能無關緊要,但事實並非如此。其他呼叫可能僅引起***,而***通常是導致生產問題的主要原因。這是兩個測試結束時所需的額外**:

service.verifynoothercalls();
很容易忘記這一點。

moq 4.7

自動附帶了

autofixture.automoq

不支援此方法的檔案。為了能夠呼叫它,需要單獨安裝乙個更新的版本(至少

4.8)。此外,

moq版本本身沒有附帶

integrationfixture

,因此對於這種情況,您需要單獨安裝。這種方法確實有助於防止***,但很容易忘記。如果您想檢視所有**:它

github上。

我很難學到這種方法。我發現了乙個由實際***引起的實際生產問題,以防萬一我會使用

verifynoothercalls

方法。希望本文能幫助您避免犯同樣的錯誤。

被遺忘的角落有著被遺忘的人

如不是我變了模樣。便是你淡忘了時光。為自己的心門上了鎖。從此再也無人能愉悅。最怕此生決定忘記你,卻突然得到你的訊息。如果我的手不小心碰著你的手,你是會躲開,還是下意識牽住。能駕馭你的人,其實就是你心甘情願,視如生命愛的人。最好的時光,就是你喜歡我,我也喜歡你,可我們都還沒表白。非主流個性簽名 願意委...

被遺忘的Rotor

2002年3月27日,ms發布了shared source mon language infrastructure beta 1 接著,在2002年11月5日發布shared source mon language infrastructure 1.0。shared source cli的 名叫 r...

被遺忘的知識 showModalDialog

window.showmodaldialog 方法用來建立乙個顯示html內容的模態對話方塊。vreturnvalue window.showmodaldialog surl varguments sfeatures surl 必選引數,型別 字串。用來指定對話方塊要顯示的文件的url vargum...