2016-06-26 2 views
1

인터페이스의 명백한 형변환 오류로 인해 단위 테스트에 문제가 있습니다. 이것에 대한 해결책이 있는지 나는 확신하지 못한다. 그러나 나는 나의 특별한 시나리오를 위해 아직 충분히 명확한 것을 찾지 못했다.유닛 테스트 인터페이스에서 명시 적 캐스트 오류가 발생했습니다.

제 생성자에서 나는 데이터 모델의 일반적인 인터페이스를 전달합니다. 그런 다음 나중에 Idatamodel을 명시 적으로 내 구현에 캐스팅합니다. 이것은 유닛 테스트에서 런타임에 실행되지 않습니다.

 public EventFinder(IEventFinder Successor, 
            IAssetDataModel theAssetDataModel, 
            IAssetEventHandler theEventHandler) 
     : base(Successor, theAssetDataModel, theEventHandler) 
    { 
    } 

//later on in the I call this cast to reference the model and method I need 
       Listofstuff = ((IMyOtherDataModel)_AssetDataModel).GetListofStuff(); 

여기 내 단위 테스트에서 오류가 발생합니다. 이 메서드의 스텁이 있지만 런타임에 명시 적 캐스트가 실패하고 나는 조금 혼란 스럽습니다. 내가 단위 테스트에서이 모델의 스텁을 생성하지만, 아직도 내가 뒷조사를했다

  var stub_my_Data_model = new StubImyAssetDataModel(); 
     stub_my_Data_model.Getstuff =() => 
      { 
       List<string> results = new List<string>(); 
       results.Add("test1"); 
       return results; 
      }; 
+3

아마도 * IMyOtherDataModel이 아닌 것으로 추정되는 항목을 전달 중이므로 캐스팅이 실패합니다. 왜 그것이 작동하기를 기대합니까? 그리고 더 중요한 것은 왜 나중에 생성자가'IMyOtherDataModel' 일 필요가 있다고 가정한다면 생성자는'IAssetDataModel'만을 취하는 것입니까? –

+0

응답 해 주셔서 감사합니다. 나는 그것이 이상하게 보인다고 이해하지만, 나는 여전히 그 주위를 돌아 다니는 데 어려움을 겪고 있으며 해결책이 있다는 것을 알고있다. IAssetDataModel은 다른 모든 데이터 모델이 상속하는 인터페이스입니다. 이것은 호출하는 메소드에 유연성을 제공합니다. 다른 메서드의 상속 때문에 MyDataModel을 전달할 수 없습니다. 다시 응답 해 주셔서 감사합니다. – Momthemeatloaf

+0

당신은 발신자에게 유연성을주는 것이 아닙니다. 당신은 유연성의 환상을주고 있습니다. "필요한 데이터 모델을 나에게 알려줘. 괜찮 았어. 내가 정말로 필요로하는 데이터 모델을 나에게 넘겨주지 않으면 실패하기 전에 기다릴거야." 실제로 사용할 수없는 가치를 왜 받아들입니까? –

답변

0

실패하고 대답은 단지 인터페이스에서 파생 테스트 클래스의 데이터 모델의 구현을 만드는 것입니다.

public class TestDataModel : IMyInterface{} 
관련 문제