问题描述
我正在尝试测试仅具有私有构造函数的类。这是用于课程注册系统的。这些课程无法通过我们的应用程序创建,因此我们故意没有公共构造函数。相反,我们使用EF来获取数据库中已经存在的课程,并为他们注册学生。
我正在尝试测试Course类的register方法,但是无法创建实例。我可以用
course = (Course)Activator.CreateInstance(typeof(Course),true);
,但是由于这些属性是私有的,因此我无法设置必要的属性。
没有构造函数的单元测试的推荐方法是什么?
这是代码的精简版。
public class Course
{
private Course()
{
}
public int Id { get; private set; }
public string Name { get; private set; }
public bool Open { get; private set; }
public virtual ICollection<Student> Students { get; private set; }
public void Register(string studentName)
{
if (Open)
{
var student = new Student(studentName);
Students.Add(student);
}
}
}
//用法//
using (var db = new SchoolContext())
{
var course = db.Courses.Include(x => x.Students).Where(x => x.Name == courseName).First();
course.Register(studentName);
db.SaveChanges();
}
//单元测试//
[Fact]
public void CanRegisterStudentForOpenClass(){
// HERE I HAVE NO WAY TO CHANGE THE OPEN VARIABLE
var course = (Course)Activator.CreateInstance(typeof(Course),true);
course.Register("Bob");
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)