C# 如何使用MoQ和NUnit为WebAPI 2中的ExceptionHandler编写单元测试
我有一个WebAPI,它使用自定义的C# 如何使用MoQ和NUnit为WebAPI 2中的ExceptionHandler编写单元测试,c#,unit-testing,asp.net-web-api2,nunit,moq,C#,Unit Testing,Asp.net Web Api2,Nunit,Moq,我有一个WebAPI,它使用自定义的ExceptionHandler来处理所有异常。如何对此CustomExceptionHandler进行单元测试。任何线索都会有帮助 public class CustomExceptionHandler : ExceptionHandler { public override void Handle(ExceptionHandlerContext context) { try { con
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将无法包装它们。但是,这并没有停止手动实例化所需的类。如果自定义ExceptionHandler类需要
RequestContext
对象,则还必须定义它:var exceptionContext=new exceptionContext(异常:异常,catchBlock:catchBlock,请求:request){RequestContext=newhttprequestcontext{Configuration=Configuration}};