2014-10-01 7 views
16

मैं निम्नलिखित वर्ग है:Autofixture अनुकूलन: उपलब्ध कराने के निर्माता पैरामीटर

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

मैं AutoFixture एक साथ Foo बना रहा हूं:

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

लेकिन मैं AutoFixture str2 के ज्ञात मान प्रदान करना चाहते हैं पैरामीटर और हर दूसरे पैरामीटर के लिए डिफ़ॉल्ट व्यवहार का उपयोग करें।

मैंने SpecimenBuilder को कार्यान्वित करने का प्रयास किया लेकिन मुझे यह जानने के लिए मेटाडेटा प्राप्त करने का कोई तरीका नहीं मिला कि मुझे फू कन्स्ट्रक्टर से बुलाया जा रहा है।

क्या यह हासिल करने का कोई तरीका है?

+3

यहाँ की तरह रजिस्टर कर सकते हैं एक ही विकल्प: http://stackoverflow.com/a/16954699/126014 –

+3

पूर्णता के लिए, मैं यह भी इंगित करना चाहता हूं: http://stackoverflow.com/a/18238876/126014 –

+3

शायद आपको यह भी उपयोगी लगेगा: http://stackoverflow.com/a/15561752/ 126014 –

उत्तर

4

के रूप में दिए here आप

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

की तरह कुछ हो सकता है और उसके बाद आप इसे इस

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

var sut = fixture.Create<Foo>(); 
संबंधित मुद्दे