2014-10-19 3 views
1

Я делаю единичный тест в своем классе дизайна, и оболочка проекта была предоставлена ​​нам. В модульном тесте есть только один метод, где мне нужно добавить код. Я не могу ничего изменить в коде.Тестирование блока: Не могу понять это?

Я пробовал все, что мог придумать, используя знания C++, которые у меня есть, и попытался найти различные способы решения этой проблемы. Каждый результат, который возник, был слишком сложным, потому что у меня нет фона с C#, или информация о том, что я искал, не была дана.

Вот исходный код:

class Course 
{ 
    public Course(string id, string title, int creditHours, string description, string prerequisiteCourse) 
    { 
     this.CourseID = id; 
     this.CourseTitle = title; 
     this.CreditHours = creditHours; 
     this.Description = description; 
     this.PrerequisiteCourse = prerequisiteCourse; 
    } 


    public string CourseID; 
    public string CourseTitle; 
    public int CreditHours; 
    public string Description; 
    public string PrerequisiteCourse; 
} 


class CourseListTest 
{ 
    public static void Main(string[] args) 
    { 
     GetCourseByCourseIDTestWhenCourseExists(); 
     GetCourseByCourseIDTestWhenCourseDoesNotExist(); 
    } 


    public static void GetCourseByCourseIDTestWhenCourseExists() 
    { 

     CourseList myCourseList = new CourseList(); 
     Course myCourse = myCourseList.GetCourseByCourseID("CIS 400"); 
     if (myCourse.CourseID != "CIS 400") 
      System.Console.WriteLine("ERROR - GetCourseByCourseIDTestWhenCourseExists(): Returned CourseID Not equal (CIS 400)"); 
    } 

    public static void GetCourseByCourseIDTestWhenCourseDoesNotExist() 
    { 

     CourseList myCourseList = new CourseList(); 
     Course myCourse = myCourseList.GetCourseByCourseID("CIS 101"); 
     if (myCourse != null) 
      System.Console.WriteLine("ERROR - GetCourseByCourseIDTestWhenCourseDoesNotExist(): should have returned null"); 
    } 
} 

Здесь есть были проблемы заключается в следующем классе. Мы должны ввести код в метод GetCourseByCourseID, где я застрял.

class CourseList 
{ 
    public Course[] CourseArray = 
     { 
     new Course ("CIS 400", "OO Analysis & Design", 4, "Important class", "CIS 110") , 
     new Course ("CIS 150A" , "VB.NET Programming", 4, "Good Introduction to programming", "CIS 100") , 
     new Course ("CIS 150B", "C# Programming with labs", 4, "Follow-up to CIS 100", "CIS 100") 
     }; 


    public Course GetCourseByCourseID(string id) 
    { 

    } 

} 

Поскольку «CIS 101» не является курсом в CourseList, мы должны вернуть null. Весь смысл упражнения - заставить консоль ничего не показывать. Это означает, что код работает правильно.

Я не хочу ответа. Мне просто нужен пример того, как заставить это работать. Будучи тем, что код уже был предоставлен нам.

+0

Вам явно нужно добавить код, который ищет в CourseArray, чтобы увидеть, есть ли там CIS 101, и вернуть правильное значение, если это не так. Поэтому начните с поиска массива. (Вам понадобится цикл for.) –

+0

Не зная, что вы пробовали, мы понятия не имеем, что вы уже знаете. Вы знаете, как написать цикл? Как получить доступ к массиву? – Blorgbeard

+0

Также, как и ответ RadioSpace, в качестве ответа также проголосуйте. Он хотел бы этого. – OmegaMan

ответ

1

Я сохраню это близко к синтаксису C++.

Есть много других способов, но ...

public Course GetCourseByCourseID(string id) 
{ 
    for(int x = 0; x < CourseArray.Length; x++) 
    { 
      if(CourseArray[x].CourseID == id) {return CourseArray[x];} 
    }  

    return null; 
} 

ваш массив является статическим вы могли бы просто использовать x < 3

и более C# способ

using System.Linq; 


public Course GetCourseByCourseID(string id) 
{ 
    return CourseArray.Where(a => a.CourseID == id).FirstOrDefault(); 
} 

а есть каждый курс и Сначала верните первый элемент в полученную коллекцию. падение ямы с этим подходом заключается в том, что если у вас более одного курса с одним и тем же идентификатором, вы получаете только первый. , но тогда это, вероятно, дефект дизайна.

Следует отметить, что если CourseArray должны быть многомерными.то длина не будет использоваться, потому что она возвращает общее количество элементов во всех измерениях массива. поэтому необходимо использовать метод расширения System.Linq Count().

+0

У массивов есть способ получить их количество элементов, '.Length' – Spans

+0

@Spans DOH !! смешно, как простые вещи могут проскользнуть ум – RadioSpace

+0

Ваш первый пример не будет компилироваться, а ваш второй пример может генерировать исключения в обычных ситуациях. – OmegaMan

0

Простейшим способом было бы использовать цикл foreach, проверяя все курсы до тех пор, пока ID не совпадет. Если идентификатор не совпадает, цикл будет завершен, и вы должны вернуть значение null.

Более «продвинутый» способ - использовать LINQ, либо прямо LINQ, либо методы расширения для достижения того же результата, но с меньшим количеством кода.

0

С любым языком лучше указать переменную возврата, которая начнется в состоянии сбоя. Затем выполните работу по попытке найти состояние отказа и присвоить его возвращаемой переменной. Если вы не найдете состояние отказа, никакое присвоение не выполняется, а возвращаемое значение является нулевым.

Пример:

public Course GetCourseByCourseID(string id) 
{ 
    Course foundCourse = null; 

    if (CourseArray != null) 
    { 
     // Check course array here for the id and if one is found, assign to foundCourse. 
    } 

    return foundCourse; 

} 

Так внутри, если ты по-прежнему можно удалить любые возможные ситуации отказа. В приведенном выше в if проверках CourseArray указано значение null. Если он равен нулю, он изящно выходит и не выдает исключения о попытке проверить CourseArray. Продолжайте проводить проверки «здравомыслия» там, где это возможно, и это улучшает программирование.

+0

Ничего себе, спасибо за такие быстрые ответы. Я бы опубликовал то, что я пробовал, но все, что я получил, это ошибки NullRederenceException и ошибки StackOverFlow. Я просто не знал, как это решить. Синтаксис C# кажется немного сложным, но не слишком далеким от C++. Я думаю, что я просто все еще изучаю землю. Спасибо еще раз за помощь! Я думаю, что буду читать больше на C#. –

Смежные вопросы