流利的断言应该大于总是通过

时间:2018-05-07 05:55:58

标签: c# .net unit-testing fluent-assertions

我正在尝试使用以下方式测试我的收藏:

  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 :(得分:3)

它根本不起作用,因为LINQ Select不会迭代集合=>您的测试代码未执行

根据Fluent Assertions documentation

正确的语法应为

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

答案 1 :(得分:3)

然后编写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个对象。