c# - 如何对空枚举进行单元测试?

标签 c# unit-testing enums nunit

我有一个扩展方法,可以根据日期期间类型计算截止日期。该方法如下所示:

public static DateTime CalculateDueDate(this DateTime date, OffsetType offsetType, int offset)
{
    switch (offsetType)
    {
        case OffsetType.Days:
            return date.AddDays(offset);
        case OffsetType.Weeks:
            return date.AddWeeks(offset);
        case OffsetType.Months:
            return date.AddMonths(offset);
        default:
            throw new ArgumentOutOfRangeException("offsetType", offsetType, null);
    }
}

其中 OffsetType 枚举具有这些可能的值:

public enum OffsetType
{
    Months = 1,
    Weeks = 2,
    Days = 3
}

当未提供(或提供)OffsetType enum 时,如何确保抛出 ArgumentOutOfRangeException无效值)?如果 OffsetType 参数不是 null,我是否还需要担心对异常进行单元测试?

更新:

我希望我可以投票支持多个答案。我决定使用 Lee 建议的超出范围的值和 dasblinkenlight .这是我的鳍单元测试:

    [Test]
    public void CalculateDueDate_Throw_Exception_Test()
    {
        var date = DateTime.Now;
        var period = 3;
        var offsetType = (OffsetType) (-1);

        Assert.Throws<ArgumentOutOfRangeException>(() => date.CalculateDueDate(offsetType, period));
    }

最佳答案

您可以将超出范围的值强制转换为枚举类型:

Assert.Throws<ArgumentOutOfRangeException>(() => {
    CalculateDueDate(date, (OffsetType)(-1), offset);
});

您可以使用哪些值取决于枚举的基础类型。

关于c# - 如何对空枚举进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972266/

相关文章:

c# - 查询返回匿名类型列表,需要值列表

swift - NSDate 在测试中比较

scala - 如何在 I/O 端口中使用 chisel3.experimental.ChiselEnum?

c# - 有没有一种简单的方法可以将序数数字字符串转换为其匹配的数值?

c# - 通过Nest中的SearchRequest类设置索引名称

java - 使用 hamcrest 检查列表是否包含特定顺序的类实例

laravel - 如何在 Laravel 5 中测试 Artisan 命令

java - 为什么 switch 语句无法按需要打印字符串? ( java )

c++ - 我们可以在函数中定义枚举吗?

c# - 使用属性名称设置属性值