第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么使用Moq的Verify()進(jìn)行不確定的單元測(cè)試?

為什么使用Moq的Verify()進(jìn)行不確定的單元測(cè)試?

C#
函數(shù)式編程 2021-05-18 14:15:06
我們正在使用Moq 4進(jìn)行單元測(cè)試,尤其是控制器單元測(cè)試。我們正在使用Moq的Verify()方法來確保記錄了錯(cuò)誤。問題在于測(cè)試可以通過,但隨后的下一次運(yùn)行將失敗。我們正在使用Serilog作為記錄器。動(dòng)作方法看起來像public IActionResult Index(){    try{         var data = _repository.GetData();         return View(data);    }catch(Exception e){        Log.Error(e.Message);    }}所以單元測(cè)試正在使用_mockLogger.Verify(x=> x.Write(LogEventLevel.Error,It.IsAny<string>()));mockLogger 是在測(cè)試的構(gòu)造函數(shù)中設(shè)置的,例如var _mockLogger = new Mock<Serilog.ILogger>();Log.Logger = _mockLogger.Object;//...并且該存儲(chǔ)庫被模擬為在調(diào)用時(shí)引發(fā)異常。失敗時(shí),我們會(huì)收到錯(cuò)誤消息“ Moq.MoqException預(yù)期在Mock上調(diào)用至少一次,但從未執(zhí)行過x=>x.Write(LogEventLevel.Error,It.IsAny<string>())”有任何想法嗎?
查看完整描述

1 回答

?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊

不可能完全從發(fā)布的代碼中看到問題所在。而且,我感謝為此制作MCVE會(huì)有多艱巨。因此,我將進(jìn)行兩個(gè)猜測(cè)。

猜測(cè)1:我懷疑是您的問題的起因是static在代碼中使用s,特別是與記錄器有關(guān)。

我懷疑正在發(fā)生的事情是其他測(cè)試(未在帖子中顯示)也在修改/定義記錄器的行為,并且由于記錄器是靜態(tài)的,因此這些測(cè)試相互干擾。

嘗試重新設(shè)計(jì)代碼,以便使用serilog的ILogger接口將日志記錄功能的實(shí)例依賴注入到測(cè)試中的類中,并將其存儲(chǔ)在只讀字段中,并在需要記錄時(shí)使用。

猜想2:根據(jù)帖子中“在測(cè)試的構(gòu)造函數(shù)中設(shè)置...”這一部分,您尚未說出(或標(biāo)記)您正在使用的測(cè)試框架。但是我用過的少數(shù)工具希望您在屬性方法中而不是在測(cè)試的構(gòu)造函數(shù)中執(zhí)行這種操作。例如,NUnit具有OneTimeSetUp(在運(yùn)行該類中的任何測(cè)試之前),SetUp(在運(yùn)行該類中的每個(gè)測(cè)試之前),TearDown(在運(yùn)行該類中的每個(gè)測(cè)試之后),OneTimeTearDown(在所有測(cè)試之后)在該類中運(yùn)行)。測(cè)試的構(gòu)造函數(shù)可能會(huì)以您不期望的順序被調(diào)用,并且測(cè)試框架不支持該順序。而屬性方法的順序由框架保證。


查看完整回答
反對(duì) 回復(fù) 2021-05-23
  • 1 回答
  • 0 關(guān)注
  • 444 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)