0
단위 필터 예외를 테스트하려고합니다. 예외를 확인할 수는 있지만 단위 테스트에서 유효성을 검사하는 예외 메시지를 찾지 못하는 것 같습니다. 여기에 내 코드 ...단위 테스트 ExceptionFilterAttribute
public class ExceptionHandlingAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is TimeoutException)
{
context.Response = context.Request.CreateErrorResponse(HttpStatusCode.RequestTimeout, context.Exception.Message);
return;
}
if (context.Exception is UnauthorizedAccessException)
{
context.Response = context.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, context.Exception.Message);
return;
}
context.Response = context.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Unable to process your request.");
}
}
단위 테스트 코드는
[Theory, MemberData("ExceptionData")]
public void OnExceptionTests(Exception ex, HttpStatusCode statusCode)
{
var request = new HttpRequestMessage();
var actionContext = InitializeActionContext(request);
var httpActionExectuedContext = new HttpActionExecutedContext(actionContext, ex);
var exceptionHandlingAttribute = new ExceptionHandlingAttribute();
exceptionHandlingAttribute.OnException(httpActionExectuedContext);
Assert.Equal(actionContext.Response.StatusCode, statusCode);
Assert.Equal(actionContext.Response.ReasonPhrase, ex.Message);
}
public static IEnumerable<object[]> ExceptionData
{
get
{
return new[]
{
new object[] { new TimeoutException("My timeout message."), HttpStatusCode.RequestTimeout }
};
}
}
내 문제는 다음과 같습니다 Assert.Equal (actionContext.Response.ReasonPhrase, ex.Message);
시계 창에서 보려고하면 응답에서 "내 시간 초과 메시지"를 찾지 못하는 것 같습니다.
UPDATE :
actionContext.Response.ReasonPhrase = "요청 시간 초과"
ex.Message = "내 시간 제한 메시지"
당신은 당신의 응답 클래스의 일부 코드를 표시 할 수 있습니다 : 여기
, responseContent 지금 있었다 읽은 후 ... 내가 무슨 짓을했는지? – CalebB
또한 Microsoft의 [Asser.Equals] (https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.assert.equals.aspx) 문서에 따라 문제가 발생할 수 있습니다. Assert .Equals는 문자열이 아닌 객체를 비교합니다. 나는 이것에 대해 잘못 될 수는 있지만 문자열을 비교하려는 경우'actionContext.Response.ReasonPhrase.Equals (ex.Message)'와 같은 것을 할 수 있지만 내 코드 스 니펫에 표시된 Assert.Equals 및 String.Equals 메소드는 모두 두 가지 비교 방법은 실제로 값을 설정하지 않습니다. – CalebB
첫 번째 질문을 이해하면 Response 클래스 (context.Response = ...)는 기본 C# 클래스입니다. 당신의 질문을 잘못 듣고 있습니까? – BCarlson