gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:48:54 25 4
gpt4 key购买 nike

我有一个使用自定义 ExceptionHandler 来处理所有异常的 WebAPI。我如何对这个 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# - 如何使用 MoQ 和 NUnit 在 WebAPI 2 中为 ExceptionHandler 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42622422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com