为了账号安全,请及时绑定邮箱和手机立即绑定

如何在引发异常的方法中对接收到的调用进行单元测试

如何在引发异常的方法中对接收到的调用进行单元测试

C#
守着星空守着你 2021-04-01 08:22:34
我正在尝试对引发异常的方法进行单元测试,并且在引发异常之前,它必须执行一些任务,例如记录日志。我正在使用NSubstitute,无法解决这个问题。所以我的测试看起来像这样[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>());}现在,我想断言记录器是否收到警告日志,但是由于上面的行发送了异常,并且我具有预期的异常属性,因此测试不会检查断言。我能想到的一个肮脏的代码是将错误语句包装在测试中的try catch中,但不是最整洁的代码。//Acttry{    var recordAnalyser = new RecordAnalyser(fileMock, logger);}catch (Exception){    // eat}被测代码-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 回答

  • 2 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信