我正在编写一个单元测试来断言一组对象的属性。其中一个属性是一个整数,该整数应该为集合中的每个对象递增 1。但是,如果您明白我的意思,则不能保证将项目添加到集合中的顺序与它们“排序”的顺序相同。
我希望能够编写一个断言语句,大意是:
public class Something
{
public int SequenceNumber { get; set; }
}
[Test]
public void SomethingSequenceNumberTest()
{
var lotsOfThings = new List<Something>
{
new Something { SequenceNumber = 1 },
new Something { SequenceNumber = 2 },
new Something { SequenceNumber = 4 },
new Something { SequenceNumber = 3 },
}
// Assert that a sequence of integer are incremental, that there are no repetitions or gaps.
Assert....?
}
最佳答案
好吧,我们可以创建一个 LINQ
表达式,它应该只返回一个 1
序列。您应该能够基于此构建断言:
var ordered = lotsOfThings.OrderBy(t=>t.SequenceNumber);
var final = ordered.Zip(ordered.Skip(1),(f,s)=>s-f);
(不确定您使用的到底是哪个框架,但大多数应该具有断言
一些关于枚举/集合的能力。例如,对于 MSTest,您将使用 CollectionAssert
类中的东西)
(由您决定是否值得通过在 ordered
定义上添加 .ToList()
来优化它。我通常不对测试进行微优化,我假设我们没有处理列表中的数百万项。我还假设您不想修改原始列表,因为在那里您可以直接Sort()
它而不是引入 LINQ 排序方式
)
关于c#断言整数序列是递增的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51514878/