示例#1
0
        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.コンテンツ, 内容);
            }
        }
示例#2
0
        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);
            }
        }