我在我的设计课程中进行单元测试,并且项目的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。练习的重点是让控制台不显示任何内容。这意味着代码工作正常。
我不想要答案。我只是想要一个如何让它工作的例子。因为代码已经提供给我们了。
答案 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的异常。尽可能地进行“健全”检查,以便更好地进行编程。