首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 產生隨機時間的單元測試:邊界條件驗證與 NUnit 實作 (第 2 部分)

     編輯:關於C語言

測試目標

驗證 DateTimeHelper.GetRandomTime 在極端邊界 (DateTime.MinValue/MaxValue) 與參數順序互換時,產生的隨機時間皆落於指定範圍內。

NUnit 測試程式碼

using System;
using NUnit.Framework;

namespace Yyw
{
    [TestFixture]
    public class DateTimeHelperFixture
    {
        [Test]
        public void TestGetRandomTime()
        {
            DateTime min = DateTime.MinValue;
            DateTime max = DateTime.MaxValue;
            Random rnd = new Random();

            // 參數順序: (max, min)
            for (int i = 0; i < 10000; i++)
            {
                DateTime rt = DateTimeHelper.GetRandomTime(max, min, rnd);
                CheckResult(min, max, rt);
            }
            // 參數順序: (min, max)
            for (int i = 0; i < 10000; i++)
            {
                DateTime rt = DateTimeHelper.GetRandomTime(min, max, rnd);
                CheckResult(min, max, rt);
            }
        }

        private void CheckResult(DateTime min, DateTime max, DateTime rt)
        {
            TimeSpan ts1 = new TimeSpan(rt.Ticks - min.Ticks);
            TimeSpan ts2 = new TimeSpan(rt.Ticks - max.Ticks);
            Assert.IsTrue(ts1.TotalSeconds >= 0 && ts2.TotalSeconds <= 0);
        }
    }
}

測試重點

  • 使用 Ticks 精確比較時間範圍,避免 Seconds 屬性只回傳秒數部分的誤區。
  • 大量迴圈 (10,000 次) 提高隨機分布覆蓋率。
  • 雙向參數順序測試確保方法內部正確處理 min/max 互換邏輯。

延伸建議

  • 加入 [Repeat(100)] 屬性簡化迴圈。
  • 測試 Random 種子固定情況下的可重現性。
  • 搭配 DateTime.Kind (Local/Utc/Unspecified) 驗證時區處理正確性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved