Я пытаюсь настроить так:Как 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;
}
Пожалуйста обеспечивает [mcve] так, что ваша проблема может быть воспроизведена и возможным решением при условии. В вашем текущем примере недостаточно информации для воспроизведения вашей проблемы. – Nkosi
Похоже, вы создаете макет 'IRepository' и устанавливаете его метод 'GetAll()' для возврата '_обсервирования', но вы не держите ссылку на макет, что означает, что вы не можете получить свой макет «CommonServices», чтобы использовать его, а это значит, что ваша установка никогда не вызывается. Поскольку вы работаете с расплывчатыми mock, среда создает собственный 'IRepository ', когда он нужен, и все его методы возвращают null. Вам нужно придумать способ получить ваш макет в «CommonServices». –
wablab
У меня есть пример обновления –