2017-02-15 1 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 не может быть инициализирована, поскольку он не имеет параметр меньше конструктора. Mocking framework ищет конструктор с меньшей конструкцией, чтобы создать mock-объект.

Если у вашего класса нет конструктора без параметров, вам необходимо передать эти параметры при создании Mock. В вашем случае mock из CourseRepository будет создан следующим образом.

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

Вместо нулевого значения вы также можете передавать макет объектов параметров конструктора.

+1

Это должно быть отмечено как ответ –