单元测试:无法解决这个问题?

时间:2014-10-19 20:44:52

标签: c# unit-testing

我在我的设计课程中进行单元测试,并且项目的shell已经发给我们了。单元测试中只有一种方法,我必须添加代码。我无法更改代码中的任何其他内容。

我已经尝试了所有我能想到的东西,使用了我所拥有的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。练习的重点是让控制台不显示任何内容。这意味着代码工作正常。

我不想要答案。我只是想要一个如何让它工作的例子。因为代码已经提供给我们了。

3 个答案:

答案 0 :(得分: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();
}

a是每个课程,First返回结果集合中的第一个元素。这种方法的一个陷阱是,如果你有多个具有相同身份的课程,你只能得到第一个。 但那可能是一个设计缺陷。

应该注意的是,如果CourseArray是多维的。那么长度将无法使用,因为它返回数组所有维度中元素的总数。因此,必须使用System.Linq Count()扩展方法。

答案 1 :(得分:0)

最简单的方法是使用foreach循环,检查所有课程,直到ID匹配。如果没有ID匹配,则循环将退出,您应该返回null。

更“先进”的方法是使用LINQ,直接使用LINQ或扩展方法来实现相同的结果但代码更少。

答案 2 :(得分:0)

对于任何语言,最好声明一个将在失败状态下启动的返回变量。然后尝试找到非故障状态并将其分配给返回变量。如果没有找到非故障状态,则不进行任何分配,并且返回值正确为null。

示例:

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中你可以继续删除任何可能的失败情况。 if中的上一个检查CourseArray为null。如果它为null,则优雅地退出并且不会抛出关于尝试检查CourseArray的异常。尽可能地进行“健全”检查,以便更好地进行编程。