Настройка создания анонимных последовательностей в AutoFixture - PullRequest
0 голосов
/ 04 июня 2018

Используя анонимные последовательности , я могу создавать последовательности объектов, когда меня не волнует, сколько и какого типа последовательность:

public class Foo { public string Bar { get; set; } }

var fixture = new Fixture();
var foos = fixture.CreateMany<Foo>();

Есть ликаким-то образом я могу настроить создание таких последовательностей и, например, установить свойство для каждого элемента в коллекции таким образом, чтобы рассматривать всю коллекцию одновременно, а не только один элемент за раз?

ДляНапример, есть ли способ добиться следующего?

public interface ISortable
{
    int SortOrder { get; set; }
}

public class Foo : ISortable
{
    public string Bar { get; set; }
    public int SortOrder { get; set; }
}

var fixture = new Fixture();

// TODO: Customize the fixture here

var foos = fixture.CreateMany<Foo>();

// foos now have sort-order set to e.g. a multiple of their index
// in the list, so if three items, they have sort order 0, 10, 20.

1 Ответ

0 голосов
/ 04 июня 2018

Прошло много времени с тех пор, как я передал контроль над AutoFixture, поэтому моя информация может быть устаревшей, но я не думаю, что есть какая-либо функция, подобная этой.В таких случаях я обычно использую обычный код для настройки того, что генерирует AutoFixture.В этом конкретном случае вы можете использовать почтовый индекс для достижения желаемого результата;Прототип:

[Fact]
public void SetSortOrderOnFoos()
{
    var fixture = new Fixture();
    var foos = fixture
        .CreateMany<Foo>()
        .Zip(
            Enumerable.Range(0, fixture.RepeatCount),
            (f, i) => { f.SortOrder = i * 10; return f; });

    Assert.Equal(3, foos.Count());
    Assert.Equal( 0, foos.ElementAt(0).SortOrder);
    Assert.Equal(10, foos.ElementAt(1).SortOrder);
    Assert.Equal(20, foos.ElementAt(2).SortOrder);
}

Этот тест не является надежным, но я надеюсь, что он передает основную идею.

...