Red*_*Red 2 c# enums nunit unit-testing
我有一个扩展方法,根据日期时间类型计算到期日.该方法如下所示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
其中OffsetType枚举具有以下可能的值:
public enum OffsetType
{
Months = 1,
Weeks = 2,
Days = 3
}
Run Code Online (Sandbox Code Playgroud)
如何ArgumentOutOfRangeException在OffsetType enum未提供(或提供无效值)时确保抛出?如果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));
}
Run Code Online (Sandbox Code Playgroud)
您可以通过将超出范围显式转换为 来构造非法值int,OffsetType例如
OffsetType t = (OffsetType)5;
Run Code Online (Sandbox Code Playgroud)
现在您可以调用,向其传递为单元测试构造的非法值,并断言抛出了CalculateDueDate类型的异常。ArgumentOutOfRangeException
注意:虽然在您执行详尽的switch覆盖所有情况的情况下这是多余的,但在使用分支覆盖某些有效情况的enum情况下,您应该使用 检查无效值。defaultEnum.IsDefined(typeof(OffsetType), t)
您可以将超出范围的值强制转换为枚举类型:
Assert.Throws<ArgumentOutOfRangeException>(() => {
CalculateDueDate(date, (OffsetType)(-1), offset);
});
Run Code Online (Sandbox Code Playgroud)
您可以使用哪些值取决于枚举的基础类型.
| 归档时间: |
|
| 查看次数: |
1484 次 |
| 最近记录: |