ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 如何使用MoQ和NUnit在WebAPI 2中为ExceptionHandler编写单元测试

2019-05-27 15:53:34  阅读:213  来源: 互联网

标签:c unit-testing nunit moq asp-net-web-api2


我有一个WebAPI,它使用自定义ExceptionHandler来处理所有异常.如何对此CustomExceptionHandler进行单元测试.任何领导都会有所帮助

public class CustomExceptionHandler : ExceptionHandler
{
    public override void Handle(ExceptionHandlerContext context)
    {
        try
        {
            context.Result = new ResponseMessageResult(context.Request.CreateResponse(HttpStatusCode.InternalServerError, context.Exception));
        }
        catch (Exception)
        {
            base.Handle(context);
        }
    }

    public override bool ShouldHandle(ExceptionHandlerContext context)
    {
        return true;
    }
}

解决方法:

要对此自定义异常处理程序进行单元测试,请创建sut / mut所需的依赖项,并执行测试以验证预期的行为.

这是一个简单的例子,可以帮助您入门.

[TestClass]
public class CustomExcpetionhandlerUnitTests {
    [TestMethod]
    public void ShouldHandleException() {
        //Arrange
        var sut = new CustomExceptionHandler();
        var exception = new Exception("Hello World");
        var catchblock = new ExceptionContextCatchBlock("webpi", true, false);
        var configuration = new HttpConfiguration();
        var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/api/test");
        request.SetConfiguration(configuration);
        var exceptionContext = new ExceptionContext(exception, catchblock, request);
        var context = new ExceptionHandlerContext(exceptionContext);

        Assert.IsNull(context.Result);

        //Act
        sut.Handle(context);

        //Assert
        Assert.IsNotNull(context.Result);
    }
}

对于上述测试,仅提供必要的依赖性以进行测试.被测试的方法(mut)对ExceptionHandlerContext有一个依赖.在将该类传递给mut之前,已经为它提供了该类的最小依赖性.

可以扩展断言以适应预期的行为.

由于所有依赖项都不是抽象的,因此Moq无法将它们包装起来.但是,这并没有阻止手动实例化所需的类.

标签:c,unit-testing,nunit,moq,asp-net-web-api2
来源: https://codeday.me/bug/20190527/1164526.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有