FluentAssertions исключает повторную конфигурацию - PullRequest
0 голосов
/ 04 мая 2018

У меня есть код модульного теста, подобный этому:

// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
  option => option
    .Excluding(x => x.Id)
    .Excluding(x => x.Status)
    .Excluding(x => x.Stale)
    .Excluding(x => x.Body)
    .Excluding(x => x.CreatedBy)
    .Excluding(x => x.UpdatedBy),
  "because version3 is version2 updated");

А потом снова

// version4 should be a copy of version3 with some differences
version4.Data.ShouldBeEquivalentTo(version3,
  option => option
    .Excluding(x => x.Id)
    .Excluding(x => x.Status)
    .Excluding(x => x.Stale)
    .Excluding(x => x.Body)
    .Excluding(x => x.CreatedBy)
    .Excluding(x => x.UpdatedBy),
  "because version4 is version3 updated");

Как я могу выделить option?

Я хотел бы сделать что-то вроде этого:

// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
  option => baseOption,
  "because version3 is version2 updated");

А может быть, даже так:

// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
  option => baseOption
    .Excluding(x => x.OtherProperty),
  "because version3 is version2 updated");

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Или переключитесь на v5, чтобы сравнить тестируемый объект с анонимным типом, где вы определяете только свойства, которые вам нужны для этого конкретного теста.

0 голосов
/ 04 мая 2018

Объявлять делегат опции внешне как базу

Func<FluentAssertions.Equivalency.EquivalencyAssertionOptions<MyDataType>,
    FluentAssertions.Equivalency.EquivalencyAssertionOptions<MyDataType>>
    baseOption = option => option
        .Excluding(x => x.Id)
        .Excluding(x => x.Status);

И используйте это с утверждением

// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2, baseOption, 
    "because version3 is version2 updated");

Для другого утверждения, которое должно основываться на базе, вы должны вызвать делегата и добавить дополнительные опции

// version3 should be a copy of version2 with some differences
version3.Data.ShouldBeEquivalentTo(version2,
  option => baseOption(option)
    .Excluding(x => x.OtherProperty),
  "because version3 is version2 updated");

Следует отметить, что текущий используемый синтаксис устарел в новых версиях платформы.

version3.Should().BeEquivalentTo(version2, baseOption, 
    "because version3 is version2 updated");
...