c# – 使用Machine.Fakes和WithSubject如何在创建主题时告诉框架使用特定的构造函数参数值

前端之家收集整理的这篇文章主要介绍了c# – 使用Machine.Fakes和WithSubject如何在创建主题时告诉框架使用特定的构造函数参数值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想告诉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参数的特定值.

解决方法

您可以在WithSubject< T>上使用Configure()方法
Establish context = () =>
    Configure(x => x.For<Func<string,StandardOffer>>()
        .Use(input => new StandardOffer(input)));

以这种方式注册函数优先于自动模拟.

猜你在找的C#相关文章