2014-10-01 14 views
16

ho la seguente classe:personalizzazioni Autofixture: fornire parametro del costruttore

class Foo 
{ 
    public Foo(string str, int i, bool b, DateTime d, string str2) 
    { 
     ..... 
    } 
} 

Sto creando un Foo con AutoFixture:

var foo = fixture.Create<Foo>(); 

ma voglio AutoFixture per fornire un valore noto per la str2 parametro e utilizzare il comportamento predefinito per ogni altro parametro.

Ho provato a implementare un SpecimenBuilder ma non riesco a trovare un modo per ottenere i metadati associati alla richiesta di sapere che mi viene chiamato dal costruttore Foo.

Esiste un modo per raggiungere questo obiettivo?

+3

Ecco una sola opzione: http://stackoverflow.com/a/16954699/126014 –

+3

Per completezza, voglio anche sottolineare questo: http://stackoverflow.com/a/18238876/126014 –

+3

Forse troverai utile anche questo: http://stackoverflow.com/a/15561752/ 126014 –

risposta

4

Come risposto here si può avere qualcosa di simile

public class FooArg : ISpecimenBuilder 
{ 
    private readonly string value; 

    public FooArg(string value) 
    { 
     this.value = value; 
    } 

    public object Create(object request, ISpecimenContext context) 
    { 
     var pi = request as ParameterInfo; 
     if (pi == null) 
      return new NoSpecimen(request); 

     if (pi.Member.DeclaringType != typeof(Foo) || 
      pi.ParameterType != typeof(string) || 
      pi.Name != "str2") 
      return new NoSpecimen(request); 

     return value; 
    } 
} 

e quindi è possibile registrarsi come questo

var fixture = new Fixture(); 
fixture.Customizations.Add(new FooArg(knownValue)); 

var sut = fixture.Create<Foo>(); 
Problemi correlati