c# - 无法实例化类错误的代理

标签 c# asp.net asp.net-mvc

我正在做一个简单的单元测试,在创建类(class)时,标题字段不能为空。我必须使用具有 UnitOfWork 依赖注入(inject)的服务类来测试它。当我调试测试时,出现异常错误 Can not instantiate proxy of class: ContosoUniversity.Models.CourseRepository 我调查了该错误,但无法理解如何解决该问题,并且Assert 语句?

Error Message Display Image

类(class)资料库

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

工作单元

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;
    }

类(class)服务

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]
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));
}

最佳答案

错误表明 CourseRepository 无法初始化,因为它没有无参数构造函数。模拟框架首先寻找无参数构造函数来创建模拟对象。

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

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

除了 null,您还可以传递构造函数参数的模拟对象。

关于c# - 无法实例化类错误的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42254974/

相关文章:

c# - 如何在 C# 中使用我的软件设置在客户端系统上安装 MySQL 服务器?

javascript - 如何在脚本中禁用 RequiredFieldValidator

c# - 将 PDF 作为页面的一部分查看

asp.net-mvc - 如何在 asp.net mvc 2 的辅助方法中应用缓存

javascript - 如何正确使用Json

c# - 一种实时获取自上次调用方法以来经过的毫秒数的方法

c# - 将值放入字典并在文本框中显示它们

c# - QT 中字节数组到 double 转换失败

asp.net - 连接到防火墙后面的 MSSQL 服务器

c# - 保持简单的成员资格 OAuth session 事件