0

8つのパラメーターを受け取るCreateメソッドを持つFactoryクラスがあります。

これらの8つのパラメーターはすべて、Createメソッド内で組み合わせて使用​​されます。

Createメソッドは、カスタムコレクションを返します。

結果としてのカスタムコレクションは、他のコレクションと比較する必要があります。

Createメソッドにも渡されました。しかし、私はカスタムの1:1の比較を行うことはできません

コレクション。成功させるには、フィルタリング、ドリルダウン、並べ替えなどを行う必要があります。

主張する...

私は単体テストについてはよく知っていますが、実際に避けたいことをアサーション自体に多くのロジックを取り入れずに、そのようなシナリオをテストすることについては無知です。

Createメソッドはカレンダーの「日」のコレクションを返すため、コレクション全体をテストする必要がある1日の手動テストを実行できません。エッジケーステストでは不十分です。

アップデート

私はあなたが理解する私のサンプルの中で最も簡単なものであるサンプルをここに置きます...

私の他の単体テスト(実行されていない)は、日付範囲が大きいため、はるかに困難になります。

アサーションとテストするロジックが増加します。

[Test]
        public void CreatePeriods_3TimeTablesWithin7VisibleDays_21Periods()
        {
            // ARRANGE
            IDateService dateService = new DateService();
            LessonplannerFactory factory = new LessonplannerFactory(dateService);

            DateTime startDate = new DateTime(2013, 03, 01);
            DateTime endDate = new DateTime(2013, 03, 15);

            String schoolclassCode1 = "BIO1";
            String schoolclassCode2 = "BIO2";
            String schoolclassCode3 = "BIO3";

            IEnumerable<TimeTable> timetableA = new List<TimeTable> { 
                new TimeTable { LessonNumber = 3, SchoolclassCodeMonday = schoolclassCode3, WeekTypeState = TimeTable.WeekType.A },
                new TimeTable { LessonNumber = 2, SchoolclassCodeMonday = schoolclassCode2, WeekTypeState = TimeTable.WeekType.A }, 
                new TimeTable { LessonNumber = 1, SchoolclassCodeMonday = schoolclassCode1, WeekTypeState = TimeTable.WeekType.A }, 
            };

            TimeTable.WeekType selectedWeekType = TimeTable.WeekType.A;
            TimeTable.WeekType startWeekType = TimeTable.WeekType.A;
            DayOfWeek firstDayOfWeek = DayOfWeek.Monday;
            IEnumerable<DayOfWeek> visibleWeekDays = new List<DayOfWeek> { DayOfWeek.Friday, DayOfWeek.Sunday, DayOfWeek.Monday };

            int numberOfVisibleDays = 7; int numberOfTimeTables = 3;

            // ACT
            var periods = factory.Create(startDate, endDate, 0, timetableA, null, selectedWeekType, startWeekType, firstDayOfWeek, visibleWeekDays);

            // sort by both properties to make this unit test testable...
            var sortedPeriods = periods.OrderBy(p => p.LessonNumber).ThenBy(p => p.LessonDate);

            // ASSERT

            Assert.IsTrue(periods.Count() == numberOfTimeTables * numberOfVisibleDays);

            // LessonNumber 1
            Assert.AreEqual(sortedPeriods.ElementAt(0).LessonNumber, 1);
            Assert.AreEqual(sortedPeriods.ElementAt(1).LessonNumber, 1);
            Assert.AreEqual(sortedPeriods.ElementAt(2).LessonNumber, 1);
            Assert.AreEqual(sortedPeriods.ElementAt(3).LessonNumber, 1);
            Assert.AreEqual(sortedPeriods.ElementAt(4).LessonNumber, 1);
            Assert.AreEqual(sortedPeriods.ElementAt(5).LessonNumber, 1);
            Assert.AreEqual(sortedPeriods.ElementAt(6).LessonNumber, 1);

            Assert.AreEqual(sortedPeriods.ElementAt(0).SchoolclassCode, string.Empty);
            Assert.AreEqual(sortedPeriods.ElementAt(1).SchoolclassCode, string.Empty);
            Assert.AreEqual(sortedPeriods.ElementAt(2).SchoolclassCode, schoolclassCode1);
            Assert.AreEqual(sortedPeriods.ElementAt(3).SchoolclassCode, string.Empty);
            Assert.AreEqual(sortedPeriods.ElementAt(4).SchoolclassCode, string.Empty);
            Assert.AreEqual(sortedPeriods.ElementAt(5).SchoolclassCode, schoolclassCode1);
            Assert.AreEqual(sortedPeriods.ElementAt(6).SchoolclassCode, string.Empty);

            Assert.AreEqual(sortedPeriods.ElementAt(0).LessonDate, new DateTime(2013, 03, 01));
            Assert.AreEqual(sortedPeriods.ElementAt(1).LessonDate, new DateTime(2013, 03, 03));
            Assert.AreEqual(sortedPeriods.ElementAt(2).LessonDate, new DateTime(2013, 03, 04));
            Assert.AreEqual(sortedPeriods.ElementAt(3).LessonDate, new DateTime(2013, 03, 08));
            Assert.AreEqual(sortedPeriods.ElementAt(4).LessonDate, new DateTime(2013, 03, 10));
            Assert.AreEqual(sortedPeriods.ElementAt(5).LessonDate, new DateTime(2013, 03, 11));
            Assert.AreEqual(sortedPeriods.ElementAt(6).LessonDate, new DateTime(2013, 03, 15));

            // LessonNumber 2
            // do the same as above

            // LessonNumber 3  
            // do the same as above
        }
4

1 に答える 1

0

「作成」するコードを細かく分割する必要があるように思われます。関数に非常に多くのパラメーターがあることは、通常、1つのオブジェクトに非常に多くの機能が混在していることを示しています。

作業をより小さなオブジェクトに分割できる場合は、各オブジェクトの機能をより簡単にテストできます。次に、より高いレベルのテストを使用して、作業をすべてのより小さなオブジェクトに正しく委任していることを確認できます。

于 2013-03-05T19:48:40.683 に答える