2010-07-14 4 views
1

MvcContrib의 테스트 도우미와 Rhino Mock 3.5를 사용하여 ASP.NET MVC 동작 메서드를 테스트하고 있습니다. 나는 그렇게처럼 내 가짜 컨트롤러를 구축 : MvcContrib을 사용하여 Server.MapPath를 스터핑하려고합니다. 테스트 도우미와 Rhino Mock 3.5

var _builder = new TestControllerBuilder(); 
_builder.InitializeController(_controller); 

그래서 내가 가짜 HTTP 서버를 포함하는 가짜 컨트롤러를 얻을 등

그때 그렇게

controller.Server.Stub(x => x.MapPath(Arg<string>.Is.Anything)).Return("/APP_DATA/Files/"); 
처럼는 Server.MapPath 방법을 스텁하기 위해 노력하고있어

하지만 내 테스트에서 Server.MapPath ("/ APP_DATA/Files /")를 호출하면 null이 반환됩니다.

이 내가 놓친 게 무엇 테스트

const string STOCK_NUMBER_ID = "1"; 
    const string FULL_FILE_PATH = "App-Data/Files"; 

    var controller = CreateStockController(); 
    _uploadedFileTransformer.Stub(x => x.ImageBytes).Return(new byte[10]); 
    _uploadedFileTransformer.Stub(x => x.ConvertFileToBytes(FULL_FILE_PATH)).Return(true); 

    controller.Server.Stub(x => x.MapPath(Arg<string>.Is.Anything)).Return("/App_Data/Files/"); 

    controller.AddImage(Guid.NewGuid(), STOCK_NUMBER_ID); 

입니까?

+0

테스트를 볼 수 있습니까? 누락 된 리포지토리처럼 보입니다. 재생(). – PatrickSteele

+0

OP에 테스트를 추가했습니다. Rhino Mocks v3.5에서 레코드 및 재생 기능을 사용해야한다고 생각하지 않았습니다. 제가 틀 렸습니다. –

+0

'CreateStockController()'도 붙여 줄 수 있습니까? 나는 당신이 사용하고있는 테스트 도우미에 익숙하지 않지만, 어디서 controller.Server가 생성 되었는가? – Grzenio

답변

0

이것은 MVCContrib의 버그입니다 (적어도 내 컴퓨터에서 가지고있는 것 - v1.0.0.0). 컨트롤러 컨텍스트를 설정할 때, Rhino.Mocks 레코드/재생 모드를 사용하고 있지만 (이것은 버그입니다) HttpServer 모의를 재생 모드로 설정하지 않습니다. 그것은 다른 모든 것을 재생 모드로하지만 그 모드는 아닙니다.

controller.Server.Replay(); 

을 테스트 당신의 "준비"섹션의 일환으로 :

그래서 빠른 수정하는 것입니다. 그럼 잘 작동합니다.

+0

Patrick, 내가 제안한 것을 시도해 보았습니다. controller.Server.Replay()를 추가했지만 여전히 동일한 문제가 있습니다. MVC2와 함께 MVCContrib v2.0.36.0을 사용하고 있습니다. 난이 문제에 대한 연대를 가지고있는 것 같아 결국에는 HTTPServerUtilityBase 매개 변수를 액션 메소드에 추가하고 Server 객체를 제공하는 사용자 정의 모델 바인더를 만들었습니다. 그런 다음 테스트에서 내 자신의 스텁 HttpServerUtilityBase를 만들고 MapPath 메서드를 작성했습니다. 그것들 모두 잘 작동하지만, 나는 TestHelper가 처음에 정확한 스텁을 제공하는 것을 선호했을 것이다. –

+0

확인. 내가 시도한 샘플 프로젝트는 MVC1이었다. MVC2에 여전히 버그가있는 것 같습니다. CodePlex에서 코드를 포크 (fork)하기 쉽고 수정하고 제출해야합니다. 다행 이군! – PatrickSteele

1

이전 게시물 그러나 나는 이것을 찾고 있었고 해결책을 찾았습니다. MvcContrib의 TestHelper는 아마도 저에게 효과가 있었기 때문에 고쳐 졌을 것입니다.

_builder.HttpContext.Server.Stub(s => s.MapPath("~/" + filepath)).Repeat.Once().Return(mapedPath); 
관련 문제