public void キャッシュTest() { Assert.IsTrue(File.Exists(this.ファイルパス)); Assert.IsNotNull(this.Stopwatch); using (var CDR = new キャッシュデータレンタル <string>()) { // 外部依存アクションを接続。 CDR.ファイルからデータを生成する = (path) => { System.Threading.Thread.Sleep(生成時間ms); // 生成は時間のかかる処理とする using (var sr = new StreamReader(path.数なしパス)) return(sr.ReadToEnd()); }; CDR.世代を進める(); Assert.AreEqual(1, CDR.現世代); // 初回の取得 → 時間がかかる this.Stopwatch.Restart(); var 内容 = CDR.作成する(this.ファイルパス); Assert.IsTrue(this.Stopwatch.ElapsedMilliseconds >= 生成時間ms); Assert.AreEqual(this.コンテンツ, 内容); // 2回目の取得 → 時間はかからない this.Stopwatch.Restart(); 内容 = CDR.作成する(this.ファイルパス); Assert.IsTrue(this.Stopwatch.ElapsedMilliseconds < 生成時間ms / 2); // 目安として半分以下 Assert.AreEqual(this.コンテンツ, 内容); // ファイルの最終更新日時を変更する File.SetLastWriteTime(this.ファイルパス, DateTime.Now); // 3回目の取得 → 時間がかかる this.Stopwatch.Restart(); 内容 = CDR.作成する(this.ファイルパス); Assert.IsTrue(this.Stopwatch.ElapsedMilliseconds >= 生成時間ms); Assert.AreEqual(this.コンテンツ, 内容); // 4回目の取得 → 時間はかからない this.Stopwatch.Restart(); 内容 = CDR.作成する(this.ファイルパス); Assert.IsTrue(this.Stopwatch.ElapsedMilliseconds < 生成時間ms / 2); // 目安として半分以下 Assert.AreEqual(this.コンテンツ, 内容); } }
public void 世代Test() { Assert.IsTrue(File.Exists(this.ファイルパス)); Assert.IsNotNull(this.Stopwatch); using (var CDR = new キャッシュデータレンタル <string>()) { // 外部依存アクションを接続。 CDR.ファイルからデータを生成する = (path) => { System.Threading.Thread.Sleep(生成時間ms); // 生成は時間のかかる処理とする using (var sr = new StreamReader(path.数なしパス)) return(sr.ReadToEnd()); }; CDR.世代を進める(); Assert.AreEqual(1, CDR.現世代); // 初回の取得 → 時間がかかる this.Stopwatch.Restart(); var 内容 = CDR.作成する(this.ファイルパス); Assert.IsTrue(this.Stopwatch.ElapsedMilliseconds >= 生成時間ms); Assert.AreEqual(this.コンテンツ, 内容); // 現在、キャッシュは1個。 Assert.AreEqual(1, CDR._キャッシュデータリスト.Count); // 世代を進める → 前世代中にファイルを取得したので、まだキャッシュは1個のまま。 CDR.世代を進める(); Assert.AreEqual(2, CDR.現世代); Assert.AreEqual(1, CDR._キャッシュデータリスト.Count); // 世代を進める → 前世代中にファイルを取得しなかったので、キャッシュから消された。 CDR.世代を進める(); Assert.AreEqual(3, CDR.現世代); Assert.AreEqual(0, CDR._キャッシュデータリスト.Count); // 2回目の取得 → また時間がかかる this.Stopwatch.Restart(); 内容 = CDR.作成する(this.ファイルパス); Assert.IsTrue(this.Stopwatch.ElapsedMilliseconds >= 生成時間ms); Assert.AreEqual(this.コンテンツ, 内容); Assert.AreEqual(1, CDR._キャッシュデータリスト.Count); } }