2013-05-01 3 views
11

특정 유형 (이 경우 System.Data.DataSet)에 대한 자동 고정 견본 빌더를 작성합니다. 작성자는 FakeDataSet을 반환하며 이는 테스트 용으로 사용자 정의 된 DataSet입니다.유형에 대한 자동 완성품 견본 빌더 작성

DataSet이 요청되는 경우에도 (즉, request 속성으로 드릴링하여 알 수 있음) 다음과 같이 작동하지 않습니다.

public class DataSetBuilder : ISpecimenBuilder 
{ 
    public object Create(object request, ISpecimenContext context) 
    { 
     var dataSet = request as DataSet; 
     if (dataSet == null) 
     { 
      return new NoSpecimen(request); 
     } 

     return new FakeDataSet(); 
    } 
} 

이 변형은 작동하지만 지나치게 복잡해 보입니다. 같은 일을 성취 할 수있는 더 좋은 방법이있는 것 같고, 나는 뭔가를 놓치고 있습니다.

public class DataSetBuilder : ISpecimenBuilder 
{ 
    public object Create(object request, ISpecimenContext context) 
    { 
     var seededRequest = request as SeededRequest; 
     if (seededRequest == null) 
     { 
      return new NoSpecimen(request); 
     } 

     var requestType = seededRequest.Request as Type; 
     if (requestType == null) 
     { 
      return new NoSpecimen(request); 
     } 

     if (requestType.Name != "DataSet") 
     { 
      return new NoSpecimen(request); 
     } 

     return new FakeDataSet(); 
    } 
} 

답변

12

이 할 간단 할 것이다 :

fixture.Register<DataSet>(() => new FakeDataSet()); 

을하지만, 당신이 SpecimenBuilder을 사용 원하는 경우,이 또한 작동합니다 :

public class DataSetBuilder : ISpecimenBuilder 
{ 
    public object Create(object request, ISpecimenContext context) 
    { 
     var t = request as Type; 
     if (typeof(DataSet).Equals(t)) 
      return new FakeDataSet(); 

     return new NoSpecimen(request); 
    } 
} 

개인적으로, 나는 좋겠 첫 번째 옵션을 사용하십시오.

+2

동의합니다. 등록 방법을 사용하는 것이 좋습니다. 감사! –

+0

빠른 질문 : var t = 요청을 유형으로 할 수 없습니다. 항상 null을 돌려주기 때문에 항상 SeededRequest 유형입니다. 왜? –

+0

@ AdanayMartín _always_가 'null'을 반환하면 뭔가 잘못된 것처럼 들립니다. 대답 할 기회조차 있으면 재 질문 (새로운 질문으로)이 필요합니다. –