c#断言整数序列是递增的

标签 c# unit-testing

我正在编写一个单元测试来断言一组对象的属性。其中一个属性是一个整数,该整数应该为集合中的每个对象递增 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/

相关文章:

c# - MySql 查询 - 选择位置、别名和参数

c# - Windows UWP 在发现后连接到 BLE 设备

unit-testing - Starbasic 有单元测试框架吗?

c# - 在类声明中使用 #ifdef 使实现仅在调试期间可用以进行单元测试

python - 我应该测试辅助函数还是只测试主要函数?

python - 在 python 单元测试中断言 `is`

c# - 如何在 SiteFinity 8 中按类别过滤帖子

c# - 不同的 DLL,但在控制台应用程序和网站中应该相同

c# - 从另一个表格关闭一个表格?

java - 在java中进行单元测试时如何跳过一段代码