首页 > 解决方案 > 流利的断言应该大于总是通过

问题描述

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

  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。

标签: c#.netunit-testingfluent-assertions

解决方案


那么写作的问题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对象。


推荐阅读