Aft*_*ton 15 c# asp.net asp.net-mvc
我正在进行一个简单的单元测试,在创建课程时,Title字段不能为空.我不得不使用具有UnitOfWork的依赖注入的服务类来测试它.当我调试我的测试时,我收到一个异常错误,Can not instantiate proxy of class: ContosoUniversity.Models.CourseRepository
我查看了错误,但我无法理解如何解决问题和Assert语句?
CourseRepository
public class CourseRepository : GenericRepository<Course>
{
public CourseRepository(SchoolContext context)
: base(context)
{
}
Run Code Online (Sandbox Code Playgroud)
的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;
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
测试方法
[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));
}
Run Code Online (Sandbox Code Playgroud)
Che*_*iya 52
该错误表示CourseRepository
无法初始化,因为它没有参数较少的构造函数.模拟框架首先查找参数较少的构造函数以创建模拟对象.
如果您的类没有无参数构造函数,那么您需要在创建Mock时传递这些参数.在你的情况下,模拟CourseRepository
将创建如下.
var repositoryMock = new Mock<CourseRepository>(null);
Run Code Online (Sandbox Code Playgroud)
您也可以传递构造函数参数的模拟对象,而不是null.
模拟时只需使用接口即可。
Mock<ICourseRepository> mockRepo = new Mock<ICourseRepository>();
mockRepo.Setup(m => m.GetByID(course.CourseID)).Returns(course);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15893 次 |
最近记录: |