Беглое утверждение должно быть больше, чем всегда пройти - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь проверить свою коллекцию, используя:

  var costByFactoryt = dataAccess.GetcostPerFactoryt(null, null);
  costByFactoryt.Count().Should().BeGreaterThan(0);
  costByFactoryt.Select(x => x.Cost.Should().BeGreaterThan(100));

Но проблема в том, что если я изменю последнюю строку кода на

 costByFactoryt.Select(x => x.Cost.Should().BeGreaterThan(1000));

или

costingByCircuit.Select(x => x.Cost.Should().BeLessThan(100));

Это все еще проходит, что неправильно.

Что я пытаюсь проверить, так это то, что все затраты должны быть больше 100.

Ответы [ 2 ]

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

Тогда проблема с записью costByFactoryt.Select(x => x.Cost.Should().BeGreaterThan(100)); в том, что она ничего не проверяет. Он создает ленивое выражение LINQ, которое никогда не повторяется, т. Е. Не вызывается ни один из BeGreaterThan.

При использовании Fluent Assertions вы получите самые подробные сообщения об ошибках, которых вы избегаете при использовании Select, так как дополнительная информация будет доступна для генератора сообщений об ошибках.

Когда

costByFactoryt.Select(x => x.Cost).Should().OnlyContain(x => x > 100)
Сбой

, генератор сообщений выведет объекты Cost.

Вместо написания

costByFactoryt.Should().OnlyContain(x => x.Cost > 100)

вместо сообщения об ошибке будут содержаться все объекты x.

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

Это просто не работает таким образом, потому что LINQ Select не выполняет итерацию коллекции => ваш тестовый код не выполняется

Согласно Документация Fluent Assertions

правильный синтаксис должен быть

costingByCircuit.Select(x => x.Cost).Should().OnlyContain(x => x > 100);
...