2012-09-28 4 views
0

Je suis actuellement test unitaire d'un système de registre universitaire, alors qu'il a toujours une erreur quand une méthode que je vais tester contient un médiateur qui prendra contact avec l'Université avec servi de médiateur. Y a-t-il des idées sur la façon de tester cette méthode?Unité Méthodes de test qui contiennent un médiateur utilisant C#

La méthode est:

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

Avec [injection de dépendance ] (http://en.wikipedia.org/wiki/Dependency_injection), vous pouvez insérer un objet 'University' simulé à l'exécution pour le test unitaire. Une comparaison des cadres fictifs est ici: http://stackoverflow.com/questions/37359/what-c-sharp-mocking-framework-to-use –

+2

L'injection de dépendance @ArunMahapatra n'est pas strictement nécessaire pour utiliser des objets fictifs dans les tests unitaires . – phoog

Répondre

0

Comme suggéré dans les commentaires, je Mock un objet universitaire dans les essais et l'injecter dans la classe qui détient ces fonctions. Rappelez-vous: vous essayez de tester une unité de code .. pas toute une chaîne de fonctionnalités comme ce serait le cas lors des tests d'intégration.

aussi .. Je factoriser ce .. Je sais que ce n'est pas ce que vous avez demandé .. mais il pourrait faciliter les tests beaucoup plus facile et moins salissant bug trouver:

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

Merci de répondre à moi! J'ai également remarqué que je peux utiliser un objet simulé pour se moquer de l'université. Et je recherche sur le Web pour le tutoriel toute la journée ... Je reçois toujours une erreur sur l'objet maquette. Permettez-moi de vous montrer un exemple: si j'ai une classe appelée "Cours", et dans "Cours" j'ai une méthode appelée "HasRequirement" retourne la valeur booléenne. Comment puis-je me moquer de cette méthode "HasRequirement" afin que dans mon test unitaire, je puisse utiliser le HasRequirement simulé pour attribuer directement sa valeur? –

Questions connexes