Как передать тип объекта класса Lazy в конструктор при макете с помощью MOQ - PullRequest
0 голосов
/ 24 октября 2018
public class StudentTests
{
    private readonly Mock<IStudentRepository> studentRepository;
    private readonly Mock<Lazy<IDepartmentService>> departmentService;
    private readonly Mock<IStudentService> studentService;
    private readonly Student student;

    public StudentTests()
    {
        this.studentRepository = new Mock<IStudentRepository>();
        this.departmentService = new Mock<Lazy<IDepartmentService>>();
        this.studentService = new Mock<IStudentService>();

        this.student = new Student(departmentService.Object, studentRepository.Object, studentService.Object);
    }
}

Приведенный выше код, в котором IDepartmentService имеет тип Lazy, и при передаче его в конструктор выдает ошибку.Поскольку объект типа Lazy доступен через ".Value" и в MOQ используйте ".Object"

Заранее спасибо за помощь!.

1 Ответ

0 голосов
/ 24 октября 2018

Вам не нужно издеваться над Lazy объектом, вместо этого вы смоделируете объект Lazy, а затем создаете Lazy вручную следующим образом:

new Lazy<IDepartmentService>(() => departmentService.Object)

Таким образом, вы получаете:

private readonly Mock<IDepartmentService> departmentService; 
...
this.student = new Student(new Lazy<IDepartmentService>(() => departmentService.Object), studentRepository.Object, studentService.Object);
...