ASP.NET Http 처리기를 단위 테스트하기 위해 moq를 사용하고 있습니다.
여기에서는 HttpRequestBase 클래스의 Request 속성을 사용하여 현재 요청에 대한 HttpRequest 인스턴스에 액세스하려고합니다. 우리가 알다시피 간단한 구문은 QueryString, Form, Cookies 또는 ServerVariables 컬렉션, 즉 Request [ "key"]에서 데이터에 액세스하는 데 사용할 수 있습니다. (핸들러의 ProcessRequest 메서드에서 사용되는 것)
하지만 쿼리 문자열 값을 얻을 수 없습니다. 코드는 다음과 같습니다.
테스트 클래스
[TestMethod()]
private static void MockProcessRequestExecution(AbcHandler abcHandler)
{
NameValueCollection queryString = new NameValueCollection();
queryString.Add("employeeid", "22");
Mock<HttpContextBase> testHttpContext = new Mock<HttpContextBase>();
Mock<HttpResponseBase> testHttpResponse = new Mock<HttpResponseBase>();
Mock<HttpRequestBase> testHttpRequest = new Mock<HttpRequestBase>();
testHttpContext.SetupGet(context => context.Response).Returns(testHttpResponse.Object);
testHttpContext.SetupGet(context => context.Request).Returns(testHttpRequest.Object);
testHttpRequest.SetupGet(request => request.QueryString).Returns(queryString);
testHttpContext.SetupGet(context => context.Request.QueryString).Returns(queryString);
testHttpResponse.SetupSet(response => response.ContentType = "text/plain");
abcHandler.ProcessRequest(testHttpContext.Object);
testHttpResponse.VerifyAll();
}
핸들러 메서드 코드 내에서 다음과 같이 요청 변수를 추출합니다.
ProcessRequest(HttpContextBase context)
{
var employee = context.Request["employeeid"];
}
employeeid의 값이 null이됩니다.
context.Request.QueryString [ "employeeid"]로 작성된 경우 값을 얻지 만 ProcessRequest 메서드에 작성된 코드를 변경할 수 없습니다. 따라서 질문은 요청 키의 값을 얻는 방법입니다. "employeeid"
코드는 쿼리 문자열을 볼뿐만 아니라 요청 항목 속성 을 사용합니다. msdn에서 :
QueryString, Form, Cookies 또는 ServerVariables 컬렉션에서 지정된 개체를 가져옵니다.
Request 객체를 모의 할 때 코드에서 사용하는 Item 속성도 모의 처리해야합니다. ( HttpRequest
실제 객체가 아닌 모의 객체를 사용하고 있기 때문에 QueryString 속성을 보는 실제 클래스 의 코드는 실행되지 않습니다!)
불행히도 다음과 같이 모든 키에 대해 모의에서 Item 속성을 수동으로 설정해야합니다.
testHttpRequest.SetupGet(r => r["employeeid"]).Returns("22");
여전히 NameValueCollection
단위 테스트에서를 만들고 루프를 사용하여 쿼리 문자열의 각 키에 대한 Item 속성을 설정할 수 있습니다. 이렇게하면 Request["employeeid"]
및 Request.QueryString["employeeid"]
(동일한 값을 반환 함)을 모두 사용하는 코드를 테스트 할 수도 있습니다 .
NameValueCollection queryString = new NameValueCollection{ {"employeeid", "22"} };
//Setup Request Item property for each key in the query string
foreach (var qsKey in queryString.AllKeys)
{
var key = qsKey;
testHttpRequest.SetupGet(r => r[key]).Returns(queryString[key]);
}
//You can still mock the Request.QueryString using the same values
testHttpRequest.SetupGet(r => r.QueryString).Returns(queryString);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다