单元测试:Can';我想不通

本文关键字:想不通 Can 单元测试 | 更新日期: 2023-09-27 18:27:08

我正在我的设计类中进行单元测试,项目的外壳已经给了我们。单元测试中只有一个方法需要添加代码。我不能更改代码中的任何其他内容。

我已经用我所掌握的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。练习的全部目的是使控制台不显示任何内容。这意味着代码工作正常。

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

单元测试:Can';我想不通

我会让它接近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返回结果集合中的第一个元素。这种方法的一个缺点是,如果你有多个具有相同id的课程,你只会得到第一个。但这很可能是一个设计缺陷。

应当注意,如果CCD_ 2是多维的。则长度将不可用,因为它返回阵列的所有维度中的元素的总数。因此必须使用System.LinqCount()扩展方法。

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

更"高级"的方法是使用LINQ,直接使用LINQ或扩展方法来实现相同的结果,但代码更少。

对于任何语言,最好声明一个将在失败状态下启动的返回变量。然后尝试查找非故障状态并将其分配给返回变量。如果没有找到非失败状态,则不执行赋值,并且返回值正确为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的异常。在可能的情况下继续进行"健全性"检查,这有助于更好的编程。