2011-02-11 4 views
0

나는 조롱/스터 빙/위장에 대해 많이 읽었으며 정신적 장애물에 여전히 부딪쳤다.Moq를 사용하는 MVP - 조롱 된보기로드

저는 MVP (Model View Presenter)를 "재미있는"체중 감량 추적 시스템으로 적응하려고합니다. 저는 자신의 Fatty McFatter-self를 위해 구축하고 있습니다. 나는 TDD & '이것에 의해 책'을 시도하고 있지만 많은 정신 블록을 때리고 실속합니다.

지금 내 발표자를 만들고 내 서비스 &보기를 조롱하고 있습니다. 다시주의 : 여기에 내 테스트의 서비스와보기 MOQ

[Test] 
    public void GetLog_WithExistingDate_ViewSetWithExistingLog() 
    { 
     WeightLogModel model = new WeightLogModel 
            { 
             EntryDate = DateTime.Now, 
             Waist = 42, 
             Weight = 242 
            }; 

     service.Setup(x => x.GetLog(It.IsAny<DateTime>())).Returns(model); 

     presenter.Display(DateTime.Now); 

     IWeightLogView myView = view.Object; 
     Assert.AreEqual(model.Weight, myView.Weight); 

    } 

으로 조롱하고 내 발표자에 -이 내 표시 방법 : 이제

public void Display(DateTime date) 
    { 
     var weightLog = service.GetLog(date); 
     if(weightLog == null) return; 

     View.EntryDate = weightLog.EntryDate; 
     View.Waist = weightLog.Waist; 
     View.Weight = weightLog.Weight; 
    } 

- I 디스플레이로 디버깅 할 경우 호출되는 - 나는 weightLog가 내가 모의에서 설정 한 정확한 정보로 가득 차 있다는 것을 안다. 그러나 View.EntryDate, View.Waist 등을 설정한다고 가정하면 View 값이 변경되지 않습니다. 그들은 0 또는 0001/1/1을 유지합니다.

작동시키기위한 방법이 있습니까? 아니면 그냥 나쁜 시험입니까? 혼란스러워하고 있습니다.

답변

2

감사의 움직임에 저를 시작하십시오. 내가 반환 할 것을 명시 적으로 설정하고 싶지는 않았지만 - 나는 모의 견해가 내 견해처럼 행동하기를 원했습니다. SetupProperty -> view.SetupProperty (x => x.Weight) //를 호출하여 조롱 된 setter가 정상적으로 동작하도록 할 수 있습니다. // 여기에 테스트가 전달됩니다. 이제는 가중치가 설정된 것으로 가정합니다.

[Test] 
    public void GetLog_WithExistingDate_ViewSetWithExistingLog() 
    { 
     WeightLogModel model = new WeightLogModel 
            { 
             EntryDate = DateTime.Now, 
             Waist = 42, 
             Weight = 242 
            }; 

     service.Setup(x => x.GetLog(It.IsAny<DateTime>())).Returns(model); 
     // I ADDED THIS ONE LINE 
     view.SetupProperty(x => x.Weight); 

     presenter.Display(DateTime.Now); 

     IWeightLogView myView = view.Object; 
     Assert.AreEqual(model.Weight, myView.Weight); 

    } 
1

여기에 모든 설정 코드 나 클래스 간의 종속성이 표시되지 않습니다.

실제로 "myView"뷰를 조롱하는 경우 모의 설정을 반환하도록 설정했거나 반환 할 항목을 지정하지 않은 경우 각 유형의 기본값을 반환합니다 (어떤 사운드 무슨 일이 일어나고 있는지). 귀하의 코멘트에서

: 나는 설치에 service.GetLog (날짜) 노력하고 있어요

내가 시험에있는 WeightLogModel를 반환합니다. 지금까지 원래의 질문에서 작업처럼 보인다

내 발표자로 제공 WeightLogModel 그 을 만들 것 - 내 생각은 이렇게하면 때문이다.

내 조롱보기에 할당 - 가 View.EntryDate = weightLog.EntryDate .... weightLog 테스트에서 설정이 무엇인지이 경우에 .... 내가 분명 해요 희망 어디로 내 머리가 ... 나는 아니에요 내가 옳다는 말 - 이건 내 생각입니다.

어디에서 "내 조롱 한보기에 지정 하시겠습니까?" 보기 속성이 실제로 조롱 한보기인지 여부는 코드에서 분명하지 않습니다 (코드가 불완전하기 때문에).

비록이 경우 은 실제로는과 관련이 없습니다. View 속성이 모의 객체 인 경우 반환 할 객체를 반환 할뿐입니다. 즉, 해당 속성이 "일반"속성처럼 동작하지 않습니다.

그래서 다음은 명시 적으로 설정하지 않고 실패합니다 필에

mockView.MyProperty = "hello"; 
Assert.AreEqual("hello", mock.MyProperty); 
+0

답장을 보내 주셔서 감사합니다. 설치 과정에서 실제로 일어나지는 않았지만, 모의를 만드는 것은 전부이며, 조롱받은 서비스 및 조롱 한 시각을 가진 발표자입니다. 다른 설정에 관해서는 - 내가 테스트에서 가지고있는 WeightLogModel을 반환하도록 service.GetLog (날짜)를 설정하려고합니다. 제 생각에 그렇게하는 것은 제 발표자에서 WeightLogModel을 사용할 수있게 만드는 것입니다 - 조롱 한보기에 할당하는 것 - View.EntryDate = weightLog.EntryDate ... 여기서 weightLog는 테스트에서 설정되는 것입니다. .. 나는 내 머리가 어디 있는지에 대해 분명히 희망한다 ... 나는 내가 옳다고 말하지 않고있다. – ajwaka

+0

위의 수정 사항을 참조하십시오. –

관련 문제