Moq SetUp. Возврат не работает для репозитория макет - PullRequest
1 голос
/ 18 августа 2011

Я пытаюсь смоделировать метод Get () моего репозитория, чтобы он возвращал объект, чтобы имитировать обновление этого объекта, но моя установка не работает:

Вот мой тест:

[Test]
public void TestUploadDealSummaryReportUploadedExistingUpdatesSuccessfully()
{
    var dealSummary = new DealSummary {FileName = "Test"};
    _mockRepository.Setup(r => r.Get(x => x.FileName == dealSummary.FileName))
        .Returns(new DealSummary {FileName = "Test"}); //not working for some reason...

    var reportUploader = new ReportUploader(_mockUnitOfWork.Object, _mockRepository.Object);
    reportUploader.UploadDealSummaryReport(dealSummary, "", "");

    _mockRepository.Verify(r => r.Update(dealSummary));
    _mockUnitOfWork.Verify(uow => uow.Save());
}

Вот метод, который тестируется:

public void UploadDealSummaryReport(DealSummary dealSummary, string uploadedBy, string comments)
{
    dealSummary.UploadedBy = uploadedBy;
    dealSummary.Comments = comments;

    // method should be mocked to return a deal summary but returns null
    var existingDealSummary = _repository.Get(x => x.FileName == dealSummary.FileName);
    if (existingDealSummary == null)
        _repository.Insert(dealSummary);
    else
        _repository.Update(dealSummary);

    _unitOfWork.Save();
}

А вот ошибка, которую я получаю при запуске моего модульного теста:

Moq.MockException: Ожидаемый вызов на макет хотя бы один раз, но так и не был выполнен: r => r.Update (.dealSummary) Настройки не настроены.

Выполненные вызовы: IRepository 1.Get(x => (x.FileName == value(FRSDashboard.Lib.Concrete.ReportUploader+<>c__DisplayClass0).dealSummary.FileName)) IRepository 1.Insert (FRSDashboard.Data.Entities.DealSummary) в Moq.Mock.ThrowVerifyException (ожидается MethodCall, IEnumerable 1 setups, IEnumerable 1 actualCalls, выражение Expression, Times times, Int32 callCount) в Moq.Mock.VerifyCalls (Interceptor targetInterceptor, ожидаемый MethodCall, выражение Expression, времена Times) at Moq.Mock.Verify (Mock mock, Expression 1 expression, Times times, String failMessage) at Moq.Mock 1.Verify (Expression`1 expression) в FRSDashboard.Test.FRSDashboard.Lib.ReportUploaderTest.TestUploadDealSummaryReportUploadedExistingUpdatesSuccessfully

Посредством отладки я обнаружил, что x => x.FileName возвращает значение NULL, но даже если я сравниваю его с NULL, я все равно получаю NULL вместо Сводки сделки, которую я хочу вернуть. Есть идеи?

1 Ответ

9 голосов
/ 18 августа 2011

Я предполагаю, что ваша установка не соответствует звонку, который вы делаете, потому что это две разные анонимные лямбды.Вам может понадобиться что-то вроде

_mockRepository.Setup(r => r.Get(It.IsAny<**whatever your get lambda is defined as**>()).Returns(new DealSummary {FileName = "Test"});

. Вы можете проверить это, установив точку останова в методе Get () вашего репозитория и посмотрев, достигнут ли он.Так не должно быть.

...