更新:故事的寓意是信任直覺,而不是去尋找問題。最終,用戶報告的問題處於完全不同的領域,Jon強調我們在測試中引入了一個錯誤,我們錯過了該錯誤,因爲結果似乎驗證了正在尋找的內容。確定一個日曆年(有/無閏年)
原題:
在許多應用中有顯示的開始/結束日期,在結束日期包含一個日曆年的要求。因此,如果開始日期是2012年1月1日,結束日期是12月31日2012年基本規則是增加了一年,休息一天 - 因爲你是一個擴展方法:
public static DateTime CalendarYear(this DateTime dateTime)
{
return dateTime.AddYears(1).AddDays(-1);
}
然而,上面的代碼不能應付閏年!我們的單元測試標記了365個OCCURENCES其中來自1日開始日期2011年1月至直通12月31日2014年定義錯誤邊界的日期進行測試時,在預產期日期不匹配所確定的結束日期是:
- 開始日期:2011年3月1日,預計結束日期:2012年2月28日:實際結束 日期:2012年2月29日
- 開始日期:2012年2月28日,預計結束日期:02月26日 2013:實際結束日期:2013年2月27日
2011年3月1日之前的日期表現如預期,2012年2月28日之後的日期表現如預期。
我知道測試失敗的原因是因爲開始/結束日期包含2月29日閏年事件,但任何人都有一個簡單可靠的建議(應對閏年事件)來取代基本「AddYears(1).AddDays(-1)」可以快速確定日曆年?
如何使用DateTime.IsLeapYear方法? – eugeneK