Using Machine.Fakes and WithSubject <TSubject>, as you tell the structure to use the argument value of a particular constructor when creating an object

I would say that Framework Machine.Fakes uses a specific value for the constructor argument when creating an object

The object under testing has the following constructor

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

I created a test stub as follows:

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

But I'm not sure how to tell Machine.Fakes to use a specific value for the Func mappingFunction argument.

+6
source share
1 answer

You can use the Configure() method on WithSubject<T> :

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

A function registered in this way takes precedence over automatic bullying.

+8
source

Source: https://habr.com/ru/post/912165/


All Articles