【问题标题】:How to test a controller which updates what was posted to it如何测试更新发布到它的内容的控制器
【发布时间】:2012-07-11 09:44:51
【问题描述】:

这看起来很简单,但我似乎无法让它工作。我想对控制器的分配操作进行单元测试。它需要一个 IEnumerable(Of Integer) 来表示要分配的所有对象的 ID。

这是我编写的代码,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

【问题讨论】:

  • System.InvalidOperationException : 委托返回值应该可以从 HvacAudit 分配

标签: asp.net tdd rhino-mocks rhino-mocks-3.5


【解决方案1】:

我可以通过将代码更改为使用函数 lambda 而不是子 lambda 并直接返回值来解决此问题。我不确定 Ayende 的博客指的是什么。

<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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2019-10-16
    • 2016-03-28
    • 1970-01-01
    相关资源
    最近更新 更多