Moq HttpRequest исключение ошибки - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть модульный тест для макета объекта 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

Любые предложения по этому исключению.

1 Ответ

0 голосов
/ 24 апреля 2018

Moq может изменять только перезаписываемые элементы.HttpRequestBase.Params - это NameValueCollection

Вы получаете сообщение об ошибке, потому что свойство 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

Теперь у вас есть больше возможностей для настройки поведения поддельного запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...