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
}