.net MVC 페이지에 대한 페이지 요청을 조롱하려면 어떻게해야합니까?asp.net MVC에서 유닛 테스트, 어떻게 페이지 요청을 조롱합니까?
8
A
답변
15
사용 RhinoMocks :
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
var httpRequest = MockRepository.GenerateMock<HttpRequestBase>();
httpContext.Expect(c => c.Request).Return(httpRequest).Repeat.Any();
... set up expectations on request...
var controller = new MyController();
controller.ControllerContext = new ControllerContext(httpContext,
new RouteData(),
controller);
...invoke action, check assertions...
httpContext.VerifyAllExpectations();
httpRequest.VerifyAllExpectations();
11
Moq 사용 :
var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
request.Setup(x => x.ApplicationPath).Returns("/");
request.Setup(x => x.Url).Returns(new Uri("http://localhost/home"));
request.Setup(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection());
var context = new Mock<HttpContextBase>(MockBehavior.Strict);
context.SetupGet(x => x.Request).Returns(request.Object);
var controller = new YourController();
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
11
수동 (I 시험 당 설치의 8 개 라인을 필요로 프레임 워크 비웃음 싫어하기 때문에)
// in some common location, only once
public class MockHttpContext : HttpContextBase
{
public MockHttpRequest m_request = new MockHttpRequest();
public MockHttpResponse m_response = new MockHttpResponse();
public override HttpRequestBase Request
{ get { return m_request; } }
public override HttpResponseBase Response
{ get { return m_response; } }
}
public class MockHttpRequest : HttpRequestBase
{
// override whatever bits you want (eg cookies)
}
public class MockHttpResponse : HttpResponseBase
{
// override whatever bits you want (eg cookies)
}
// in your specific test
controller = new YourController {
ControllerContext = new ControllerContext { HttpContext = new MockHttpContext() }
};
관련 문제
- 1. 당신은 어떻게 asp.net mvc에서 캐싱 개체를 조롱합니까?
- 2. 어떻게 HttpResponseBase.End()를 조롱합니까?
- 3. 어떻게 유닛 테스트 DelegateCommand
- 4. ASP.NET MVC 유닛 RedirectResult 테스트
- 5. ASP.NET MVC에서 HtmlHelpers 테스트
- 6. asp.net 컨트롤러를 테스트 할 때 httprequestbase를 어디에서 조롱합니까?
- 7. ASP.NET MVC 유닛 테스트 및 HttpContext
- 8. ASP.NET MVC 2의 단위 테스트 유닛
- 9. ASP.NET MVC, 어떻게 페이지 내용 이전에 ASP.NET MVC에서
- 10. ASP.NET MVC에서 페이징을 어떻게 구현합니까?
- 11. asp.net MVC에서 복잡한 페이지 작성하기
- 12. ASP.NET MVC에서 Ajax.Beginform 오류 페이지
- 13. ASP.NET MVC에서 분당 요청을 조절할 수 있습니까?
- 14. NUnit을 사용한 ASP.NET MVC 유닛 테스트
- 15. HttpContext를 사용하는 ASP.NET MVC 유닛 테스트 컨트롤러
- 16. 상위 레벨에서 유닛 테스트
- 17. ASP.NET MVC에서 response.redirect는 어떻게 작동합니까?
- 18. 유닛 테스트 연결 문자열 오류
- 19. 유닛 웹 GUI 테스트
- 20. 유닛 통신 프로토콜 테스트
- 21. UI 테스트 대 유닛 테스트
- 22. 유닛 데이터 구조 테스트
- 23. Ruby의 비동기 유닛 테스트
- 24. 유닛 테스트 with Maven
- 25. IEnumerable <T>을 어떻게 조롱합니까?
- 26. ASP.NET MVC에서 뷰의 단위 테스트 수행 방법
- 27. ASP.NET MVC에서 자바 스크립트 테스트 사용 가능
- 28. 유닛 테스트 초보자
- 29. 유닛 테스트 콘솔 출력
- 30. 싱글 톤으로 유닛 테스트
좋아요. 조롱보다는 이해하기가 훨씬 쉽습니다. m_request와 m_response가 공개 된 이유는 무엇입니까? –
입니다. 테스트하기가 더 쉽도록 만들어진 가짜 개체이기 때문입니다. 그러한 것들을 비공개로 만드는 것은 내가 (그리고 때로는 당신이 할 수도있는) 그것들을 변경하기를 원한다면 부동산 등을 가져야 만한다는 것을 의미 할 것입니다. 구현 숨기기와 같은 일부 규칙은 이런 종류의 환경에서 능동적으로 해를 끼칩니다. –
왜 내가 그 질문을 한 후에 공공연히. 요청이나 응답에는 HttpContextBase에있는 방법 때문에 Setter가 없습니다. 따라서 유닛 테스트에서 요청과 응답을 변경해야하는 경우이를 공개해야합니다. –