0

現在、大学の登録システムの単体テストを行っていますが、テストしようとしているメソッドに、仲介者として大学に連絡する仲介者が含まれていると、常にエラーが発生します。この方法をテストする方法のアイデアはありますか?

メソッドは次のとおりです。

public void SelectCourse(List<Course> courses)
    {
        if (this.IsFullTime)
        {
            while (_CurrentCourses.Count < LEAST_NUM_OF_COURSES_FULLTIME)
            {
                Random rand = new Random();
                byte[] b = new byte[1];
                rand.NextBytes(b);
                int i = rand.Next(courses.Count);
                Course c = courses.ToArray()[i];
                ((University)mediator).RegisterStudentForCourse(this, c);
            }
        }
        else
        {
            while (_CurrentCourses.Count < LEAST_NUM_OF_COURSES_PARTTIME)
            {
                Random rand = new Random();
                byte[] b = new byte[1];
                rand.NextBytes(b);
                int i = rand.Next(courses.Count);
                Course c = courses.ToArray()[i];

                // I always //has unit test error with this line!!:
                ((University)mediator).RegisterStudentForCourse(this, c);
            }
        }
        System.Console.WriteLine("Student: "
                                 + this.Name 
                                 + ", with student number: (" 
                                 + this.StudentNumber 
                                 +  ") registered.");
    }
4

1 に答える 1

0

コメントで示唆されているように、テストで University オブジェクトをモックし、これらの関数を保持するクラスに挿入します。覚えておいてください: コードの UNIT をテストしようとしているのです。統合テストの場合のように、機能のチェーン全体ではありません。

また..これをリファクタリングします..これがあなたが求めているものではないことはわかっています..しかし、テストがはるかに簡単になり、バグの発見が面倒になりません。

public ClassThatHousesTheseFunctions(IUniversity university) {
    this._university = university;
}

public void SelectCourse(List<Course> courses) {
    if (this.IsFullTime) {
        performCourseSelection(courses, LEAST_NUM_OF_COURSES_FULLTIME);
    }
    else {
        performCourseSelection(courses, LEAST_NUM_OF_COURSES_PARTTIME);
    }       
}

private void performCourseSelection(IList<Course> courses, int leastNumberOfCourses) {
    Random rand = new Random();

    while (courses.Count < leastNumberOfCourses) {
        int i = rand.Next(courses.Count);
        Course c = courses.ToArray()[i];
        _university.RegisterStudentForCourse(this, c);
    }

    System.Console.WriteLine("Student: " + this.Name + ", with student number: (" + this.StudentNumber + ") registered.");
}
于 2012-09-28T04:12:52.063 に答える