2012-01-05 2 views
2

제공된 프레임 워크에 클라이언트 측 구성 요소를 작성 중이며 구성 요소를 단위 테스트 할 수 있어야합니다. 구성 요소는 MVP (Model-View-Presenter) 패턴을 사용하여 작성되었으므로 PEX를 사용하여 발표자의 단위 테스트를 자동으로 생성하고 싶습니다.구체적인 객체가 의존성이고 모의 테스트 객체를 자동 생성하는 경우 Pock에게 모의 객체를 사용하도록 지시하는 방법은 무엇입니까?

다음은 발표자의 코드입니다.

public partial class CompetitorPresenter : PresenterBase 
{ 

    private readonly ICompetitorView _view; 

    public IGlobalDataAccess GlobalDataAccess; 

    public IGlobalUI Globals; 

    public SystemClient Client; 

    public bool DeleteRecord() 
    { 
      if (_view.CompetitorName != "Daniel") 
       return false; 
      if (Client.SystemName != "Ruby") 
       return false; 
      return true; 
    } 
} 

오전 데 문제는 객체 SystemClient이 프레임 워크에 의해 제공됩니다, 나는 SystemClient의 인스턴스를 생성하기 위해 팩토리 클래스를 사용할 수 있다는 것입니다. 따라서 PEX를 실행하여 자동으로 단위 테스트를 생성 할 때 SystemClient을 무시하도록 PEX에 지시해야합니다.이 결과는 Client.SystemName != "Ruby"이라는 테스트를 거치지 않은 메서드 DeleteRecord이 완전히 덮여 있지 않음을 의미합니다. 나는 mock 객체 MSystemClient (몰수를 사용하여 만든)을 가지고 있기 때문에 어딘가에 구성에서 내가 자동으로 완전히이 방법을 충당하기 위해 테스트 케이스를 생성하는 PEX를 MSystemClient를 사용하는 PEX에게, 그리고 할 수 있다면

, 나는 궁금.

답변

0

당신은 올바른 길을 가고 있습니다. CompetitorPresenter.Client의 인스턴스가 생성 위치를 제어 할 수없는 경우 모든 인스턴스에 대한 몰을 정의 할 수 있습니다 :

MSystemClient.AllInstances.SystemNameGet =() => "SomeName"; 

귀하의 단위 테스트는 "호스팅 환경"에서 실행해야합니다 :

[HostType("Moles")] 
public void TestMethod() 
{ 
    MSystemClient.AllInstances.SystemNameGet =() => "SomeName"; 

    // Test code... 
} 
+0

감사 스테판 . 필자는 PEX가 두더지 코드를 수동으로 작성하지 않고 테스트 케이스를 자동 생성하도록하는 솔루션을 발표했다. 나는 PEX 설정 옵션을 원했다. –