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

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

單元測試中的模擬日志單例

單元測試中的模擬日志單例

C#
守候你守候我 2021-06-23 17:10:20
我有一個記錄器類,其目的是從我的解決方案中的任何類中調(diào)用,該類決定記錄某些內(nèi)容。我添加了一個接口,這就是為什么我應用了單例模式,并且沒有使用靜態(tài)類。我的 LogManager 實現(xiàn)(單例):https : //pastebin.com/NHKmbj9c我想編寫簡單的單元測試,它應該使用局部變量,測試每個 ILogger 方法的功能,但是一旦我的第一個單元通過,單例將在上下文中保持初始化狀態(tài),使后續(xù)單元測試失敗(而他們正在嘗試初始化單身人士......)。單元測試:[TestClass]public class LogManagerTests{    [TestMethod]    public void Error_ExpectedErrorLevel_ShouldBe_Error()    {        // Arrange        var actualLevel = ErrorLevel.Warning;        const ErrorLevel expectedLevel = ErrorLevel.Error;        var iLogger = LogManager.GetInstance;        iLogger.Initialize((level, msg) => { actualLevel = level; }, null);        // Act        iLogger.Error(new Exception(), string.Empty);        // Assert        Assert.AreEqual(expectedLevel, actualLevel);    }    [TestMethod]    public void Debug_ExpectedErrorLevel_ShouldBe_Verbose()    {        // Arrange        var actualLevel = ErrorLevel.Warning;        const ErrorLevel expectedLevel = ErrorLevel.Verbose;        var iLogger = LogManager.GetInstance;        iLogger.Initialize(null, (level, msg, ex) => { actualLevel = level; });        // Act        iLogger.Debug(string.Empty);        // Assert        Assert.AreEqual(expectedLevel, actualLevel);    }}另一個技巧是將 LogManager 初始化為我的 TestClass 中的私有全局變量,但是如果單元測試異步運行,這可能會產(chǎn)生競爭條件,因為多個方法將訪問相同的輸出變量,這些變量可能會相互覆蓋。是否可以以任何方式對單身人士進行 UnitTest?該設計不允許我重構 LogManager,并從中刪除單例模式。
查看完整描述

1 回答

?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

可以對單例進行單元測試,您只需要換個角度思考即可。不要那么努力地改變你的方法來適應測試??紤]創(chuàng)建一個僅用于測試的方法,LogManager.Uninitialize(). 在這組測試中的每個測試之后調(diào)用它以確保您的單例設置回可測試狀態(tài)。


[TestCleanup()]

public void Cleanup()

{

     LogManager.Uninitialize();

}

它可能不純粹,但我認為每隔一段時間編寫一次診斷方法就可以了。在需要良好測試覆蓋率的情況下,這比擁有糟糕的測試覆蓋率要好。


查看完整回答
反對 回復 2021-06-26
  • 1 回答
  • 0 關注
  • 146 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號