2016-12-08 11 views
1

у меня есть что-то вроде этого, чтобы проверить:Moqing UnitOfWork с лямбда-выражения

public void example(ModelView modelView) 
     { 
      //... 
      var statustId= 1; 
      var requests = _unitOfWork.RequestRepository.Get(m => m.RequestStatusId == statusId); 

      var requests = _unitOfWork.RequestRepository.Get(m => m.RequestTypeId == modelView.RequestTypeId); 

      var oldRequests = _unitOfWork.RequestRepository.Get(m => m.Created == DateTime.Now.AddDays(-7)); 
      //... 
     } 

Как я издеваться все «GET» с различными данными?

Это то, что я получил до сих пор: не знаю, как должно выглядеть выражение, поскольку оно использует переменные из функции.

[Test] 
public void Test() 
{ 
    //Arrange 
    _requestGenericRepo.Setup(m => m.Get(
     It.Is<Expression<Func<Request, bool>>>(e => e.Equals(First GET - using local variable); 
    _requestGenericRepo.Setup(m => m.Get(
     It.Is<Expression<Func<Request, bool>>>(e => e.Equals(Second GET - using variable from modelView)); 
    _requestGenericRepo.Setup(m => m.Get(
     It.Is<Expression<Func<Request, bool>>>(e => e.Equals(Third GET)); 
    //Act 
    var response = _controller.Example(new ModelView 
    { 
     RequestTypeId= 1 
    }); 
    //Assert 
    ... 
} 

------------------- EDIT: ---------------------- ---------------------

Было бы неплохо знать, как это делается выше, но я могу изменить все Get( В Get().Where вот так:

public void example(ModelView modelView) 
     { 
      //... 
      var statustId= 1; 
      var requests = _unitOfWork.RequestRepository.Get().Where(m => m.RequestStatusId == statusId); 

      var requests = _unitOfWork.RequestRepository.Get().Where(m => m.RequestTypeId == modelView.RequestTypeId); 

      var oldRequests = _unitOfWork.RequestRepository.Get().Where(m => m.Created == DateTime.Now.AddDays(-7)); 
      //... 
     } 


[Test] 
public void Test() 
{ 
    //Arrange 
    _requestGenericRepo.Setup(m => m.Get(
     It.IsAny<Expression<Func<Request, bool>>>()); 

    //Act 
    var response = _controller.Example(new ModelView 
    { 
     RequestTypeId= 1 
    }); 
    //Assert 
    ... 
} 
+0

Являются ли каждое из этих выражений вызываемым в тестируемом методе в одном и том же варианте использования? – Nkosi

+0

@Nkosi Да ... Я редактирую свой вопрос, но я был бы рад узнать, есть ли способ заставить его работать – Valter

ответ

1

Каково возвращаемое значение метода RequestRepository.Get? Вы можете попробовать использовать SetupSequence и выбрать путь, который хотите протестировать. Что-то вроде:

_requestGenericRepo.SetupSequence(m => m.Get(It.IsAny<Expression<Func<Request, bool>>>()) 
    .Returns(/*First call*/) 
    .Returns(/*Second call*/) 
    .Returns(/*Third call*/); 
+1

Спасибо за ответ – Valter