我正在尝试使用以下方式测试我的收藏:
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。
答案 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
个对象。