2012-09-28 36 views
0

我目前正在對大學註冊系統進行單元測試,而當我要測試的方法包含調解器時,它會始終發生錯誤,該調解器將與作爲調解器的大學聯繫。有沒有關於如何測試這種方法的想法?單元測試方法包含使用c調解器#

的方法是:

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."); 
    } 
+0

隨着[依賴注入](http://en.wikipedia.org/wiki/Dependency_injection),你可以在運行時插入一個模擬'大學'對象進行單元測試。模擬框架的比較在這裏:http://stackoverflow.com/questions/37359/what-c​​-sharp-mocking-framework-to-use –

+2

@ArunMahapatra依賴注入不是嚴格必須在單元測試中使用模擬對象。 – phoog

回答

0

正如意見建議,我會在莫克的測試相關的大學對象,並將其注入到持有這些功能的類。記住:你試圖測試一個代碼單元,而不是集成測試過程中的整個功能鏈。

還..我會重構這個..我知道這是不是你問什麼。但是它可以使測試更容易和bug發現少凌亂:

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."); 
} 
+0

謝謝你回答我!我還注意到,我可以使用模擬對象來模擬大學。我一整天都在網上搜索教程......我總是得到關於模擬對象的錯誤。讓我給你展示一個例子:如果我有一個名爲「Course」的類,並且在「Course」中有一個名爲「HasRequirement」的方法返回bool值。我怎樣才能嘲笑這個「HasRequirement」方法,以便在我的單元測試中,我可以使用模擬的HasRequirement直接分配它的值? –