使用私有构造器对类进行单元测试

问题描述

我正在尝试测试仅具有私有构造函数的类。这是用于课程注册系统的。这些课程无法通过我们的应用程序创建,因此我们故意没有公共构造函数。相反,我们使用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 (将#修改为@)