2013-05-01 13 views
11

Sto creando un generatore di campioni AutoFixture per un tipo particolare, in questo caso System.Data.DataSet. Il builder restituirà uno FakeDataSet, che è un DataSet personalizzato per il test.Creazione di un generatore di campioni AutoFixture per un tipo

La seguente non funziona, con dataSet tornando sempre nullo, anche quando un DataSet viene data della richiesta (Posso dire con perforazione della request proprietà).

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

Questa variante funziona, ma sembra eccessivamente complessa. Sembra che ci sia un modo migliore per realizzare la stessa cosa, e mi manca qualcosa.

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

risposta

12

Sarebbe più semplice per fare questo:

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

ma se si desidera utilizzare uno SpecimenBuilder, questo dovrebbe funzionare anche:

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

Personalmente, mi piacerebbe usa la prima opzione.

+2

Sono d'accordo, usare Register è la strada da percorrere. Grazie! –

+0

Domanda veloce: non posso fare var t = request as Type; perché restituisce sempre null. È sempre di tipo SeededRequest. Perché? –

+0

@ AdanayMartín Se _always_ restituisce 'null', allora sembra che qualcosa non sia giusto. Una replica (in una nuova domanda) è necessaria se dovessi avere anche una possibilità di risposta. –

Problemi correlati