2016-10-25 5 views
0

안녕하세요! 실제로NS substitute if-else 조건

public override void Run(List<string> argument) 
    { 
     connectedCameras = argument; 
     if(connectedCameras.Count == 0) 
     { 
      SetUIOnNoConnectedDevices(); 
     } 
     else 
     { 
      FillCamerasListView(); 
     } 
     View.Show(); 
    } 

이 그리고 내 문제가 FillCamerasListView 방법은 시험에 호출되지 않는 것입니다 다음 코드를 테스트

[SetUp] 
    public void SetUp() 
    { 
     controller = Substitute.For<IApplicationController>(); 
     view = Substitute.For<ICamerasView>(); 
     presenter = new CamerasPresenter(controller, view); 
     argument = InitializeDevicesList(); 
     presenter.Run(argument); 
    } 

    private List<string> InitializeDevicesList() 
    { 
     List<string> devicesList = new List<string>(); 
     Device device = new Device(); 

     devicesList.Add(device.Name); 

     return devicesList; 
    } 

    [Test] 
    public void RunIfDeviceListIsNotEmpty() 
    { 
     view.DidNotReceive().SetUIOnNoConnectedDevices(); 
     view.Received().FillCamerasListView(argument); 
     view.Received().Show(); 

    } 

: 나는 다음 테스트를, 당신의 도움이 필요합니다. 하지만 예상대로이 경우 Run 메서드가 호출되었습니다. 따라서 문제가 무엇인지 상상할 수 없으므로 귀하의 도움에 매우 감사하겠습니다. 시간 내 줘서 고마워!

+0

'FillCamerasListView()'는'view.FillCamerasListView (connectedCameras)'를 호출합니까? 당신이 얻는 주장 예외는 무엇입니까? –

+0

예. 발표자에서 호출하는 SetUIOnNoConnectedDevices 및 FillCamerasListView는 view.FillCamerasListView 및 view.SetUIOnNoConnectedDevices의 단순한 래퍼입니다. 이 문자열 view.Received() 예외가 발생했습니다 .FillCamerasListView (argument); 시험 중. – Crispried

+0

예외 오류 : 유형의 예외 'NSubstitute.Exceptions.ReceivedCallsException가'NSubstitute.dll에서 발생했지만 사용자 코드에서 추가 정보 처리되지 않은 : 전화 매칭받을 예정 : \t FillCamerasListView을 (목록 ) 실제로 일치하는 전화를받지 못했습니다. \t FillCamerasListView 래퍼 FillCamerasListView에 전달 된 인수를 수정처럼 (* 목록 는 *) – Crispried

답변

0

This example passes. 문제는 코멘트에서 설명한대로 FillCamerasListView에 전달 된 인수를 변경하는 예제에있는 것으로 보입니다.

몇 가지 옵션 :

  1. 테스트의 기대에 맞게 코드를 수정합니다. 즉 Run에 주어진 인수를 FillCamerasListView에 전달합니다.
  2. view.ReceivedWithAnyArgs().FillCamerasListView(null)을 사용하면 전달 된 인수의 세부 사항에 대해 걱정할 필요없이 호출을했다고 주장 할 수 있습니다.
  3. view.Received().FillCamerasListView(Arg.Is<List<string>>(x => Matches(x, argument))을 사용하십시오. Matches은 에 전달 된 Run을 기반으로 주어진 인수가 올바른지 여부를 결정하는 고유 한 코드입니다.