如何单元测试ASP WebAPI服务的AppInsights异常处理程序?

时间:2016-03-11 04:41:57

标签: c# asp.net asp.net-web-api

我想在WebAPI服务中添加一个全局异常处理程序。

类似this的代码,位于第23行。

有没有办法为该处理程序编写单元测试?

感谢。

1 个答案:

答案 0 :(得分:0)

当然有,但你需要知道你在寻找什么。 我假设通过实现自己的IExceptionHandler,您希望在抛出异常时发生特定的事情。例如,您可能希望ILogger像这样调用Lo​​gException()方法:

class ExceptionHandler : IExceptionHandler
{
    public void RunAction(Action unsafeAction)
    {
       try{
       unsafeAction.Invoke();
       }
       catch(Exception ex){
         _logger.LogException(ex)
       }
    }
}

要对此进行单元测试,您可以写下以下内容:

[TestMethod]
public void RunAction_WhenActionThrowsException_LoggerIsInvoked()
{
    // Arrange
    var badException = new Exception("I'm bad");
    var loggerMock = new Mock<ILogger>();
    var instance = new ExceptionHandler(loggerMock.Object);
    var badMethod = () => throw badException;

    // Act
    instance.RunAction(badMethod);

    // Assert
    loggerMock.Verify(logger => logger.LogException(badException), Times.Once());
}