2017-03-08 2 views
1

ASP.NET에서 HttpRequest 개체를 사용하여 단위 테스트를 조롱하려고합니다. 개체의 Form 컬렉션은 컬렉션이 읽기 전용임을 나타냅니다. 내 자신의 httprequest 구현을 제공 할 필요없이 내 단위 테스트를 위해이 동작을 구현할 수있는 방법이 있습니까? 다음 스 니펫은 request.Form이 읽기 전용으로 실패합니다. Tx.단위 테스트 용 HttpRequest.Form 조롱

var request = new HttpRequest("", "http://localhost" + url, ""); 
request.Form["__EVENTTARGET"] = eventTarget; 
AutorefreshSessionHelper.IsRequestForAutoRefresh(request); 

답변

2

이 조각은 양식 컬렉션에 쓰고 다시 사용할 수 없게합니다. ASP.NET 3.5에서 테스트되었습니다.

var request = new HttpRequest("", url, ""); 
var formType = request.Form.GetType(); 
formType.GetMethod("MakeReadWrite", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Invoke(request.Form, null); 

request.Form["__EVENTTARGET"] = eventTarget; 

formType.GetMethod("MakeReadOnly", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Invoke(request.Form, null); 
0

저는 단위 테스트를 위해 객체 가시성에 의해 부과 된 보호 기능을 우회하는 것이 좋습니다.

그래서 HttpRequest의 "Form"속성은 NameValueCollection 형식이며 IsReadOnly 속성이 보호되어 있습니다. 여기를 클릭하면 Reflect가 도움이됩니다.

var pi = typeof(NameObjectCollectionBase).GetProperty("IsReadOnly", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); 
pi.SetValue(request.Form, false); 
0

기본적으로 ASP.net을 테스트하기 때문에 좋은 단위 테스트는 아닙니다. 그리고 ASP.net에는 인터페이스가 없으므로 모의 수업을 할 수있는 수업이 많지 않습니다.

나는이 양식 아래에 양식의 내용을 허용하는 테스트 할 방법이 있다고 생각합니다. 그걸 시험해 보시길 권합니다.