如何对求和操作进行单元测试,以确保该操作实际上是求和

本文关键字:操作 求和 确保 实际上 单元测试 | 更新日期: 2023-09-27 18:12:18

我有以下属性:

public double TotalHours
{
    get
    {
        return (from session in sessions
                let ts = session.End.Subtract(session.Start)
                select ts.TotalHours).Sum();
    }
}

该属性应将所有会话中完成的所有小时相加。
我需要测试什么才能确保属性总是将所有会话的所有小时相加?

如何对求和操作进行单元测试,以确保该操作实际上是求和

这基本上是计算出适当的示例数据的情况。例如,您可能想要尝试以下测试:

    <
  • 没有会话/gh>
  • 单个会话
  • 会话没有开始时间或没有结束时间
  • 结束在开始之前的会话
  • 结束等于开始的会话

也许你有其他的数据验证,以确保"听起来可疑"的情况不会发生,但这些是的事情我要考虑。

我建议您模拟您的Session s来创建@Jon Skeet描述的测试数据。通过使用mock,您可以将被测试的代码隔离为TotalHours属性,而不是属性和Session的实现。

使用moq,您可以执行以下操作来设置测试数据,调用TotalHours并断言结果是您期望的值:

var data = new List<ISession>
{
    Mock.Of<ISession>(s => s.Start == DateTime.Parse("12:00 AM") && s.End == DateTime.Parse("12:10 AM")),
    Mock.Of<ISession>(s => s.Start == DateTime.Parse("1:00 AM") && s.End == DateTime.Parse("1:15 AM")),
    Mock.Of<ISession>(s => s.Start == DateTime.Parse("2:00 AM") && s.End == DateTime.Parse("2:30 AM"))
};