可以添加这样的延迟断言吗
var actualKittens = actualKittens.Select(kitten => {
Assert.IsСute(kitten);
return kitten
});
为什么?因此,即使使用期望实现实例化的语句,我也可以仅迭代一次:
CollectionAssert.AreEquivalent(expectedKittens, actualKittens.ToList());
而且它可能不仅是Select,而且是定义了迭代器且具有大量检查和逻辑(例如,一些计数和过滤)的方法。
令人怀疑的种子是在测试失败的情况下读取和调试此类代码的复杂性。
@usr似乎您已捕获到这种方式的主要缺陷-迭代器的副作用。
—
SerG
您是否还不必重复两次,一次生成列表,然后再次将其与进行比较
—
IllusiveBrian
expectedKittens
?您只是隐藏了方法调用背后的迭代。
@IllusiveBrian在这个例子中,是的。它仍然比带有额外的要少
—
SerG
.All()
。
sequence.WithSideEffect(item => Assert.IsCute(item))
,使其变得更干净。