2013-05-01 12 views
11

Tworzę konstruktor próbek AutoFixture dla określonego typu, w tym przypadku System.Data.DataSet. Budowniczy zwróci numer FakeDataSet, który jest dostosowany do testowania na poziomie DataSet.Tworzenie konstruktora próbek AutoFixture dla typu

Poniższe nie działa, ponieważ dataSet zawsze zwraca wartość zerową, nawet jeśli żądane jest DataSet (mogę stwierdzić, wykonując wiercenia w właściwościach 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(); 
    } 
} 

Ta odmiana działa, ale wydaje się zbyt skomplikowana. Wydaje się, że istnieje lepszy sposób na osiągnięcie tego samego, a ja po prostu czegoś brakuje.

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(); 
    } 
} 

Odpowiedz

12

Byłoby to prostsze rozwiązanie:

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

ale jeśli chcesz użyć SpecimenBuilder, to powinno również pracować:

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); 
    } 
} 

Osobiście bym użyj pierwszej opcji.

+2

Zgadzam się, korzystanie z rejestru jest drogą do zrobienia. Dzięki! –

+0

Szybkie pytanie: Nie mogę wykonać var ​​t = request jako Type; ponieważ zawsze zwraca wartość null. Jest zawsze typu SeededRequest. Czemu? –

+0

@ AdanayMartín Jeśli _always_ zwraca 'null', oznacza to, że coś jest nie tak. Odpowiedź (w nowym pytaniu) jest wymagana, gdybym miał nawet szansę na odpowiedź. –

Powiązane problemy