【问题标题】:Moq HttpRequest exception errorMoq HttpRequest 异常错误
【发布时间】:2018-04-24 14:38:18
【问题描述】:

我有一个单元测试来模拟 HttpRequest 对象,试图在这个测试用例中设置模拟(VB 代码):

    <TestMethod()>
    Public Sub Test()

        Dim Request = New Mock(Of System.Web.HttpRequestBase)()
        Dim Context = New Mock(Of System.Web.HttpContextBase)()


        Request.Setup(Function(x) x.Params("FieldName")).Returns("test")
        Context.Setup(Function(x) x.Request).Returns(Request.[Object])

       '...
       'Call controller method here.

    End Sub

但我收到异常错误消息: https://www.screencast.com/t/XiZIfO4Xam

有关此异常的任何建议。

【问题讨论】:

    标签: .net vb.net unit-testing moq


    【解决方案1】:

    Moq 只能修改可覆盖的成员。 HttpRequestBase.ParamsNameValueCollection

    您收到错误是因为 NameValueCollection 属性

    Public Property Item (name As String) As String
    

    不可覆盖。

    使用实际的NameValueCollection 并将其作为Params 属性传递

    <TestMethod()>
    Public Sub Test()
        `Arrange
        Dim Request = New Mock(Of System.Web.HttpRequestBase)()
        Dim httpContext = New Mock(Of System.Web.HttpContextBase)()
    
        Dim parameters As New NameValueCollection()
        parameters("FieldName") = "test"
    
        Request.Setup(Function(x) x.Params).Returns(parameters)
        httpContext.Setup(Function(x) x.Request).Returns(Request.[Object])
    
        Dim controller = New BookingController(...)
        `assign the mock http context to controller
        controller.ControllerContext = New ControllerContext()
        controller.ControllerContext.Controller = controller
        controller.ControllerContext.HttpContext = httpContext.[Object]
    
        `Act
        `...
    
        `Assert
        `...
    
    End Sub
    

    现在您可以更灵活地安排模拟请求的行为

    【讨论】:

    • 很好,它以这种方式工作。谢谢尼科西。但是当我在控制器方法中请求这个字段值时,它无法得到这个值。这是我的控制器方法:
    • 公共函数 SaveRecord() Dim FieldNo As Integer FieldNo = Request.Params("FieldName") ... 结束函数
    • 获取 request("FieldName") 的方法是否正确?如果我错了,请告诉我,这是我第一次使用 moq 对象。
    • 我在上面的测试方法中调用了控制器方法。
    • 你如何为控制器设置上下文?
    猜你喜欢
    • 1970-01-01
    • 2016-04-16
    • 2013-04-09
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    相关资源
    最近更新 更多