2016-07-12 8 views
0

Я сломал множество своих модульных тестов, когда добавил еще несколько приложений, поскольку я не использую Lazy Loading в EF. Перед моим Мок была установка линии это:Параметры настройки Moq linq включают в себя:

mockDocRepo.Setup(
      x => x.GetBy(It.IsAny<Expression<Func<Doctor, bool>>>(), It.IsAny<Expression<Func<Doctor, object>>>())) 
      .Returns(stubDoctor); 

Который работал нормально для одного включают однако добавление другого включают при вызове GetBy ломает все мои тесты. Например:

var doctor = _dbContextScope.Repository<Doctor>().GetBy(x => x.Id == DoctorId, y => y.Contracts, y => y.Leave.Select(x => x.Type)); 

Я попытался изменить мои настройки MOq принять массив It.IsAny<Expression<Func<Doctor, object>>[]>() например, однако это не похоже на работу. Я также попытался просто добавив второй включить в настройках например

mockDocRepo.Setup(
      x => x.GetBy(It.IsAny<Expression<Func<Doctor, bool>>>(), It.IsAny<Expression<Func<Doctor, object>>>(),It.IsAny<Expression<Func<Doctor, object>>>())) 
      .Returns(stubDoctor); 

Это, кажется, в финале .Select(x => x.Type) включают то, что ломает все.

Любые идеи о том, как исправить это было бы здорово.

ответ

0

не думаю, что можно установить MOQ Linq Enumerable.Select способ. Это статический метод для класса Enumerable.

Использование Moq, вы не можете издеваться/настраивать статические методы. Для его настройки это должен быть виртуальный метод.

Альтернативно, попробуйте абстрагироваться от DbContext и оберните .select в виртуальном методе. Затем вы сможете выполнить настройку.

Смежные вопросы