Используя Machine.Fakes и WithSubject <TSubject>, как указать платформе использовать конкретное значение аргумента конструктора при создании темы - PullRequest
7 голосов
/ 01 апреля 2012

Я бы хотел сказать каркасу Machine.Fakes использовать определенное значение для аргумента конструктора при создании темы

Испытуемый объект имеет следующий конструктор

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

Я создал заглушку теста следующим образом:

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

Но я не уверен, как сказать Machine.Fakes использовать определенное значение для аргумента Func mappingFunction .

1 Ответ

9 голосов
/ 01 апреля 2012

Вы можете использовать метод Configure() для WithSubject<T>:

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

Функция, зарегистрированная таким образом, имеет приоритет над автоматическим моделированием.

...