2012-04-01 19 views
6

nesnesini oluştururken belirli bir yapıcı argüman değeri kullanmak için çerçeveye nasıl söylersiniz? Machine.Fakes çerçevesinin konu oluşturulurken bir yapıcı argümanı için belirli bir değer kullanmasını istiyorumMachine.Fakes ve WithSubject öğelerini kullanma

test altındaki konu şöyle bir testin saplama oluşturduk

/// <summary> 
    /// Initializes a new instance of the <see cref="CsvFileRepository{TModel}"/> class. 
    /// </summary> 
    /// <param name="fileService">The file service.</param> 
    /// <param name="repositorySettings">The repository settings.</param> 
    /// <param name="mappingFunction">The mapping function. The mapping function takes in a line from the CSV file and returns the model for said line.</param> 
    public CsvFileRepository(IFileService fileService, IRepositorySettings repositorySettings, Func<string, TModel> mappingFunction) 
    { 
     this.FileService = fileService; 
     this.RepositorySettings = repositorySettings; 
     this.MappingFunction = mappingFunction; 
    } 

aşağıdaki kurucu sahiptir:

public class when_i_pass_a_csv_file_the_results_are_mapped_to_model_objects : WithSubject<CsvFileRepository<StandardOffer>> 
{ 
    Establish context =() => With(new OffersInFile(new[] { OfferTestData.BobsCsvTestData, OfferTestData.JohnsCsvTestData })); 

    Because of =() => result = Subject.Get(); 

    It should_return_the_same_number_of_fruits_as_there_are_in_the_source_repository =() => result.Count().ShouldEqual(2); 

    static IEnumerable<IOffer> result;        
} 

Ama Machine.Fakes'e Func mappingFunction argümanı için belirli bir değer kullanmasını nasıl söyleyeceğimi bilmiyorum.

cevap

8

Sen WithSubject<T> üzerinde Configure() yöntemi kullanabilirsiniz:

Establish context =() => 
    Configure(x => x.For<Func<string, StandardOffer>>() 
     .Use(input => new StandardOffer(input))); 

fonksiyonu bu şekilde otomatik alaycı üzerinde önceliğe sahiptir kayıtlı.

İlgili konular