Fluent assertion 应该大于 always pass

Fluent assertion should be greater than always pass

我正在尝试使用 :

测试我的 collection
  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。

那样根本行不通,因为 LINQ Select 不会迭代集合 => 你的测试代码没有被执行

根据Fluent Assertions documentation

正确的语法应该是

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

然后写 costByFactoryt.Select(x => x.Cost.Should().BeGreaterThan(100)); 的问题是它什么都不测试。 它创建一个惰性 LINQ 表达式,它从不迭代,即 BeGreaterThan 中的 none 被调用。

使用 Fluent Assertions 时,您将获得最详细的失败消息,而您避免使用 Select,因为更多信息随后可用于失败消息生成器。

何时

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

失败,消息生成器将输出Cost个对象。

改为写

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

失败消息将改为包含所有 x 个对象。