单元测试: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。练习的全部目的是使控制台不显示任何内容。这意味着代码工作正常。
我不想要答案。我只是想要一个如何让它发挥作用的例子。因为代码已经给了我们。
我会让它接近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的异常。在可能的情况下继续进行"健全性"检查,这有助于更好的编程。