我有一个存储库
public class StudentsPersonalDetailsRepository : IStudentPersonalDetailsRepository
{
private readonly StudentManagementSystemEntities _studentsDbContext;
private readonly ILogger _logger;
public StudentsPersonalDetailsRepository(StudentManagementSystemEntities context, ILogger<IStudentPersonalDetailsRepository> logger)
{
_studentsDbContext = context;
_logger = logger;
}
public IQueryable<StudentPersonalDetails> StudentPersonalDetails => _studentsDbContext.StudentPersonalDetails;
......
}
在我的服务层,我正在提供服务
public class StudentsPersonalDetailsService:IStudentPersonalDetailsService
{
private readonly IStudentPersonalDetailsRepository _repository;
private readonly ILogger _logger;
public StudentsPersonalDetailsService(IStudentPersonalDetailsRepository studentPersonalDetailsRepository,ILogger<StudentsPersonalDetailsService> logger)
{
_repository = studentPersonalDetailsRepository;
_logger = logger;
}
......
......
public StudentModelResponse GetStudentById(int id)
{
Domain.Entities.StudentPersonalDetails obj = _repository.StudentPersonalDetails.
Where(i => i.RollNo == id)
.Select(i=>new Domain.Entities.StudentPersonalDetails {
RollNo=i.RollNo,
FirstName=i.FirstName,
LastName=i.LastName,
MailId=i.MailId,
MiddleName=i.MiddleName,
DateOfBirth=i.DateOfBirth,
GenderOfPerson=i.GenderOfPerson
}).FirstOrDefault();
StudentModel ob = StudentModel.Translator(obj);
return new StudentModelResponse { StudentModel=ob};
}
}
我的测试代码是
namespace StudentUnitTests
{
public class StudentServiceShould
{
[Theory]
[InlineData(1)]
public void AbleToRetrieveStudentById(int n)
{
var mock = new Mock<IStudentPersonalDetailsRepository>();
var logger = new Mock<ILogger<StudentsPersonalDetailsService>> ();
var ob = new StudentsPersonalDetailsService(mock.Object, logger.Object);
}
}
}
我需要为GetStudentById()编写单元测试并检查函数返回的值。
请帮我看看如何模拟服务层。
答案 0 :(得分:0)
在上面我们在StudentsPersonalDetailsService.GetStudentById()
注意:从存储库读取时看起来很奇怪。如果存储库中的项目为StudentPersonalDetails
,为什么要创建新实例
我们可以像这样存根检索学生数据
public class StudentServiceShould
{
[Theory]
[InlineData(1)]
public void AbleToRetrieveStudentById(int n)
{
var students = new []{
// new Domain.Entities.StudentPersonalDetails for student role 1,
// new Domain.Entities.StudentPersonalDetails for student role 2,
// new Domain.Entities.StudentPersonalDetails for student role 3
};
var mock = new Mock<IStudentPersonalDetailsRepository>();
mock.SetupGet(mk => mk.StudentPersonalDetails).Returns(students.AsQueryable());
var logger = new Mock<ILogger<StudentsPersonalDetailsService>> ();
var ob = new StudentsPersonalDetailsService(mock.Object, logger.Object);
}
}
创建StudentModel
对象封装在Translator
中,但因为它是&#39; StudentModel&#39;上的静态方法。我们不能嘲笑它,必须一次性测试阅读和转换。