Как проверить контроллер, который обновляет то, что было опубликовано на нем

Это кажется действительно простым, но я не могу заставить его работать. Я хочу провести модульное тестирование действия присваивания моего контроллера. Требуется IEnumerable(Of Integer), который представляет идентификаторы всех объектов для назначения.

Вот код, который я написал, я получаю ошибку в операторе Do (я скопировал код из блога Ayende здесь http://ayende.com/blog/3397/rhino-mocks-3-5-a-feature-to-be-proud-of-seamless-do).

    <Test()> _
    Public Sub Assign_Post_Should_Assign_All_Audits_Provided()
        Dim auditsToAssign As IEnumerable(Of HvacAudit) = HvacAuditsGenerator.GenerateAudits() _
                                                                .Unassigned()

        Dim auditIDs As IEnumerable(Of Integer) = auditsToAssign.Select(Function(audit, index) audit.HvacAuditID)

        Dim hvacAuditRepo As IHvacAuditRepository = MockRepository.GenerateMock(Of IHvacAuditRepository)()
        hvacAuditRepo.Stub(Sub(repo) repo.GetAuditByID(1)) _
            .Do(Function(invocation) invocation.ReturnValue = auditsToAssign.Single(Function(audit) audit.HvacAuditID = invocation.Arguments(0)))

        Dim controller As New HvacAuditController(hvacAuditRepo)
        Dim r As ViewResult = controller.Assign(auditIDs).AssertViewRendered()

        r.AssertAssignedAuditCount(auditsToAssign.Count)
        auditsToAssign.AssertAreAssigned()
        hvacAuditRepo.AssertWasCalled(Sub(h) h.SaveChanges())
    End Sub

1 ответ

Решение

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

<Test()> _
Public Sub Assign_Post_Should_Assign_All_Audits_Provided()
    Dim auditsToAssign As IEnumerable(Of HvacAudit) = HvacAuditsGenerator.GenerateAudits() _
                                                            .Unassigned()

    Dim auditIDs As IEnumerable(Of Integer) = auditsToAssign.Select(Function(audit, index) audit.HvacAuditID)

    Dim hvacAuditRepo As IHvacAuditRepository = MockRepository.GenerateMock(Of IHvacAuditRepository)()
    hvacAuditRepo.Stub(Sub(repo) repo.GetAuditByID(1)) _
        .Do(Function(auditID as Integer) Return auditsToAssign.Single(Function(audit) audit.HvacAuditID = auditID))

    Dim controller As New HvacAuditController(hvacAuditRepo)
    Dim r As ViewResult = controller.Assign(auditIDs).AssertViewRendered()

    r.AssertAssignedAuditCount(auditsToAssign.Count)
    auditsToAssign.AssertAreAssigned()
    hvacAuditRepo.AssertWasCalled(Sub(h) h.SaveChanges())
End Sub
Другие вопросы по тегам