문제

나는 MOQ 프레임 워크를 시험해 보았고 지금은 장벽을 쳤다. ViewName 속성의 실제 값이 빈 문자열이기 때문에 다음 단위 테스트는 실패합니다.

왜 이것이 왜 이것이 시험을 통과하지 못하는지에 대해 올바른 방향으로 나를 지적 할 수 있습니까?

[TestMethod]
public void Can_Navigate_To_About_Page()
{
    var request = new Mock<HttpRequestBase>();
    request.Setup(r => r.HttpMethod).Returns("GET");
    var mockHttpContext = new Mock<HttpContextBase>();
    mockHttpContext.Setup(c => c.Request).Returns(request.Object);

    var controllerContext = new ControllerContext(mockHttpContext.Object, 
                                new RouteData(), 
                                new Mock<ControllerBase>().Object);
    var controller = new HomeController();

    controller.ControllerContext = controllerContext;
    var result = controller.About() as ViewResult;

    Assert.AreEqual("About", result.ViewName);
}

다음은 빈 뷰 이름도 생성됩니다.

        HomeController controller = new HomeController();
        ViewResult result = controller.About() as ViewResult;
        Assert.IsNotNull(result);
        Assert.AreEqual("About", result.ViewName);

조롱과 좋은 TTD를 보여주는 웹의 예에서 나는 위의 첫 번째 단위 테스트 예 중 하나를 작동시키는 데 필요한 다른 배관 공간에 대해 혼란스러워합니다.

건배,

앤드류

도움이 되었습니까?

해결책

테스트가 실패한 이유는 명시 적으로 명시 적으로 지정하지 않을 때보기 이름을 결정하는 것이 프레임 워크의 깊이에 있기 때문입니다. 내가 믿는 뷰 엔진에서 더 정확하게. 따라서 이것을 테스트하기 위해서는 더 많은 요청 파이프 라인을 조롱해야합니다.

내가하고 추천하는 것은 기본값에 의존하지 않고보기를 명시 적으로 지정하는 것입니다.

return View("About");

그러면 값은 아무것도 조롱하지 않고 테스트 할 것입니다.

var controller = new HomeController();
var result = controller.About() as ViewResult;
Assert.AreEqual("About", result.ViewName);

다른 팁

MVC 프레임 워크의 작동 방식에 대해 가정하고 있기 때문입니다. 뷰를 찾기 위해 컨벤션에 의존하는 경우 프레임 워크는 실제로 ViewName 속성을 다음과 같이 남깁니다. String.Empty ~까지 ExecuteResult() 호출됩니다.

68 행 에서이 코드를 볼 수 있습니다 ViewResultBase.ExecuteResult 이내에 MVC 소스:

if (String.IsNullOrEmpty(ViewName)) {
   ViewName = context.RouteData.GetRequiredString("action");
}

또한 테스트하는 내용에주의해야합니다. 경험상 테스트에 집중해야합니다. 당신이 쓴 코드, 프레임 워크 코드가 아닙니다. 컨벤션별로보기 이름이 올바르게 해결되도록 테스트하는 것은 실제로 프레임 워크 자체에 대한 단위 테스트입니다.

MVC에서 조롱을 취하는 좋은 방법을 찾고 있다면, 경로 테스트를보고 싶을 수도 있습니다 (여기서하려는 일이 여기에서 보는 것 같습니다). 당신은 할 수 있습니다 이 주제에 관한 Phil Haack의 게시물 찾기 당신을 시작하기 위해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top