DateTime.AddDays传递什么值以生成异常
本文关键字:异常 什么 AddDays DateTime | 更新日期: 2023-09-27 18:29:27
我有一个小的实用程序类,可以用输入数据生成哈希代码。什么课&它的算法对这个问题并不重要,但它看起来如下:
public static class HashCodeHelper
{
/// <summary>
/// Return a hash code to be added to the link in download data.
/// </summary>
/// <param name="baseDateTime">Today's date</param>
/// <param name="rrid">Profile ID</param>
/// <param name="downloadCode">Download code to be used for hash code generation.</param>
/// <returns>Final result is a string in this format "20140715385"</returns>
public static string GenerateHashCodeForExportLink(DateTime baseDateTime, int rrid, string downloadCode)
{
var todayDate = baseDateTime;
int expireInDays;
if (!int.TryParse(ConfigurationManager.AppSettings["ExportLinkExpireInDays"], out expireInDays))
expireInDays = 30; // If not specified in web.config file then use default value
var expiryDate = todayDate.AddDays(expireInDays);
var currentDay = todayDate.Day;
var expiryMonth = expiryDate.Month;
char nthChar = Convert.ToChar(downloadCode.Substring(expiryMonth - 1, 1));
var asciiValue = (int)nthChar;
var mod = (rrid % currentDay);
var computedHash = (asciiValue * expiryMonth) + currentDay + mod;
var fullHashCode = todayDate.ToString("yyyyMMdd") + computedHash;
return fullHashCode;
}
}
我正在为这个类编写单元测试用例,并意识到AddDays()
可以抛出一个ArgumentOutOfRangeException
,如下所示:
var expiryDate = todayDate.AddDays(expireInDays);
所以我应该写一个测试,我确实写了下面的测试用例:
[TestMethod]
public void GenerateHashCodeForExportLink_IncorrectDate_Throw()
{
try
{
HashCodeHelper.GenerateHashCodeForExportLink(new DateTime(2015, 1, 31), 501073, "001-345-673042");
Assert.Fail("Exception is not thrown");
}
catch (ArgumentOutOfRangeException)
{
}
catch (Exception)
{
Assert.Fail("Incorrect exception thrown");
}
}
问题是,我不知道通过什么导致AddDays()
方法抛出异常?我试着通过随机日期,例如1-1-1800、2015年1月30日等。
我查看了AddDays()
方法的实现,但无法理解。知道吗?
如果传入int.MaxValue
,则无论原始DateTime
是什么,其值都应该在DateTime
的可表示范围之外。
示例代码,在csharpad.com上测试:
DateTime.MinValue.AddDays(int.MaxValue);
在finally
块中使用Assert.Fail
是一个错误。。。将始终调用。目前还不清楚你的测试框架是什么,但我希望有这样的东西:
Assert.Throws<ArgumentOutOfRangeException>(() => /* code here */);
使用双精度。MaxValue作为AddDays方法中的参数。
DateTime time = DateTime.Now;
time.AddDays(double.MaxValue);
超出DateTime类的功能时,会触发ArgumentOutOfRangeException。
另一种方法可以是:
DateTime.MaxValue.AddDays(1);
或
DateTime.MinValue.AddDays(DateTime.MaxValue.Day +1);
这些代码应该抛出ArgumentOutOfRangeException