2016-07-21 3 views
0

Я пытаюсь настроить так:Как MOq установки IRepository <T>

[Test] 
public void Observatoins_Were_Returned() 
{ 
    using (var mock = AutoMock.GetLoose()) 
    { 
     // Arrange 
     mock.Mock<IRepository<WspObservation>>() 
      .Setup(x => x.GetAll()) 
      .Returns(_observations); 

     var sut = mock.Create<CommonServices>();        
     WspResponse wspResponse; 

     // Act 
     var wspObservations = sut.GetAllObservations(out wspResponse); 
     var expectedErrorCode = ResponseCodes.SUCCESS; 

     // Assert 
     // Assert.AreEqual(expectedErrorCode, wspResponse.ResponseCode); 

    } 
} 

но когда функция GetAllObservations() вызывается функция возвращает нуль в реальном коде.

В фактическом коде IRepository введена зависимость, которая работает нормально.

объект, который возвращается, выглядит следующим образом.

 var _observations = new List<WspObservation>(); 
     _observations.Add(new WspObservation() { DeviceName = "Devcie One", Steps = "3000" }); 
     _observations.Add(new WspObservation() { DeviceName = "Devcie One", Steps = "2000" }); 

фактическая функция, которая испытывается выглядит эта инъекция зависимость

public List<WspObservation> GetAllObservations(out WspResponse getAllWspObservationsResponse) 
    { 
     List<WspObservation> allWspObservations = new List<WspObservation>(); 
     getAllWspObservationsResponse = new WspResponse(); 
     try 
     { 
      //some other Business Logic 
      allWspObservations = _wspObsrep.GetAll().ToList(); 
      //some other Business Logic 
     } 
     catch (Exception ex) 
     { 
      getAllWspObservationsResponse.ResponseCode = ResponseCodes.DatabaseGetError; 

     } 
     return allWspObservations; 
    } 

выглядит следующим образом

private IRepository<WspObservation> _wspObsrep; 

    public CommonServices(IRepository<WspObservation> wspObsrep) 
    { 
     _wspObsrep = wspObsrep; 
    } 
+0

Пожалуйста обеспечивает [mcve] так, что ваша проблема может быть воспроизведена и возможным решением при условии. В вашем текущем примере недостаточно информации для воспроизведения вашей проблемы. – Nkosi

+0

Похоже, вы создаете макет 'IRepository ' и устанавливаете его метод 'GetAll()' для возврата '_обсервирования', но вы не держите ссылку на макет, что означает, что вы не можете получить свой макет «CommonServices», чтобы использовать его, а это значит, что ваша установка никогда не вызывается. Поскольку вы работаете с расплывчатыми mock, среда создает собственный 'IRepository ', когда он нужен, и все его методы возвращают null. Вам нужно придумать способ получить ваш макет в «CommonServices». – wablab

+0

У меня есть пример обновления –

ответ

0

Что такое намерение

var sut = mock.Create<CommonServices>(); 

ISN» t лучше t o Создайте реальный объект SUT и введите IRepository mock?

Я хотел бы сделать это следующим образом:

var repoMock = mock.Mock<IRepository<WspObservation>>() 
     .Setup(x => x.GetAll()) 
     .Returns(_observations); 

var sut = new CommonServices(repoMock); 
Смежные вопросы