2017-02-15 9 views
5

コースを作成するときにタイトルフィールドを空にできない単純な単体テストを行っています。私はUnitOfWorkを使ってDependency Injectionを持つサービスクラスでテストする必要があります。私のテストをデバッグすると、例外エラーが発生しました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フレームワークは、最初に模擬オブジェクトを作成するために、より少ないコンストラクタを探す。

クラスにパラメータのないコンストラクタがない場合は、Mockを作成するときにこれらのパラメータを渡す必要があります。あなたのケースではCourseRepositoryのモックは次のように作成されます。

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

nullの代わりに、コンストラクタパラメータの模擬オブジェクトも渡すことができます。

+1

これは回答としてマークする必要があります –

関連する問題