2017-02-15 95 views
5

我正在做一个简单的单元测试,在创建课程时,标题字段不能为空。我必须使用具有UnitOfWork的依赖注入的服务类进行测试。当我调试我的测试时,我得到一个异常错误Can not instantiate proxy of class: ContosoUniversity.Models.CourseRepository我查看了这个错误,但是我无法理解如何解决这个问题和Assert语句?无法实例化类错误代理

Error Message Display Image

CourseRepository

public class CourseRepository : GenericRepository<Course> 
{ 
    public CourseRepository(SchoolContext context) 
     : base(context) 
    { 
    } 

的UnitOfWork

public class UnitOfWork : IDisposable, IUnitOfWork 
{ 
    private SchoolContext context = new SchoolContext(); 
    private GenericRepository<Department> departmentRepository; 
    private CourseRepository courseRepository; 

    public CourseRepository CourseRepository 
    { 
     get 
     { 
      if (this.courseRepository == null) 
      { 
       this.courseRepository = new CourseRepository(context); 
      } 
      return courseRepository; 
     } 
    } 

    public virtual CourseRepository GetCourseRepository() 
    { 
     if (this.courseRepository == null) 
     { 
      this.courseRepository = new CourseRepository(context); 
     } 
     return courseRepository; 
    } 

CourseService

public class CourseService : ICourseService 
{ 
    private IUnitOfWork unitOfWork; 

    public CourseService (IUnitOfWork unitOfWork) 
    { 
     this.unitOfWork = unitOfWork; 
    } 

    public void Create(Course course) 
    { 
     unitOfWork.GetCourseRepository().Insert(course); 
     unitOfWork.Save(); 
    } 

    public Course GetCourseByID(int id) 
    { 
     return unitOfWork.GetCourseRepository().GetByID(id); 
    } 

TestMethod的

[TestMethod] 
public void TestMethod1() 
{ 
    var course = new Course 
    { 
     CourseID = 2210, 
     Title = string.Empty, 
     Credits = 3, 
     DepartmentID = 1 
    }; 

    Mock<CourseRepository> mockRepo = new Mock<CourseRepository>(); 
    mockRepo.Setup(m => m.GetByID(course.CourseID)).Returns(course); 

    var mockUnit = new Mock<IUnitOfWork>(); 
    mockUnit.Setup(x => x.GetCourseRepository()).Returns(mockRepo.Object); 

    var myService = new CourseService(mockUnit.Object); 
    myService.Create(course); 

    //var error = _modelState["Title"].Errors[0]; 
    //Assert.AreEqual("The Title field is required.", error.ErrorMessage); 

    //mockRepo.Setup(x => x.Insert(course)); 
} 

回答

8

错误说,CourseRepository不能初始化,因为它没有参数的构造函数。模仿框架首先查找参数较少的构造函数来创建模拟对象。

如果你的类没有无参数构造函数,那么当你创建模拟时你需要传递这些参数。在你的情况下,模拟CourseRepository将被创建如下。

var repositoryMock = new Mock<CourseRepository>(null); 

而不是null,您还可以传递构造函数参数的模拟对象。

+1

这应该被标记为答案 –

相关问题