我正在嘗試對(duì)引發(fā)異常的方法進(jìn)行單元測(cè)試,并且在引發(fā)異常之前,它必須執(zhí)行一些任務(wù),例如記錄日志。我正在使用NSubstitute,無(wú)法解決這個(gè)問(wèn)題。所以我的測(cè)試看起來(lái)像這樣[TestMethod][ExpectedException(typeof(IOException))]public void RecordAnalyser_FileReadFailedInFirstAttempt_WarningLogged(){ //Arrange var fileMock = Substitute.For<IFile>(); fileMock.ReadLines(Arg.Any<string>()).Throws(new IOException()); //Act var recordAnalyser = new RecordAnalyser(fileMock, logger); //--> throws exception. //Assert logger.Received(1).Warn(Arg.Any<string>(), Arg.Any<Exception>());}現(xiàn)在,我想斷言記錄器是否收到警告日志,但是由于上面的行發(fā)送了異常,并且我具有預(yù)期的異常屬性,因此測(cè)試不會(huì)檢查斷言。我能想到的一個(gè)骯臟的代碼是將錯(cuò)誤語(yǔ)句包裝在測(cè)試中的try catch中,但不是最整潔的代碼。//Acttry{ var recordAnalyser = new RecordAnalyser(fileMock, logger);}catch (Exception){ // eat}被測(cè)代碼-public RecordAnalyser(IFile file, ILoggerService logger){ this.logger = logger; try { names = file.ReadLines(Constants.Names).ToList(); } catch (System.IO.IOException e) { logger.Error("Names file could not be read.", ex); // How do I test above line without a try catch block in unit test throw; } }在這里尋找建議。
- 2 回答
- 0 關(guān)注
- 189 瀏覽
添加回答
舉報(bào)
0/150
提交
取消