Moq, VB, HttpResponseBase и заголовки - PullRequest
       13

Moq, VB, HttpResponseBase и заголовки

0 голосов
/ 15 сентября 2009

Я нахожусь в процессе написания кучи тестов вокруг некоторых пользовательских контроллеров, использующих Moq в VB. До сих пор мне не приходилось иметь дело с недостатками VB Lambda, поскольку я использовал только свойства или методы.

До сегодняшнего утра, когда я пытаюсь также запустить интеграционные тесты с использованием Cassini для моего кода. У меня был код для добавления заголовков, используя Response.Headers.Add. Я сделал это, чтобы легко получить коллекцию заголовков в модульных тестах, используя Moq (Of HttpResponseBase) и SetupGet for Headers-> NameValueCollection. Конечно, код засасывает что-либо кроме IIS7 в режиме Integrated Pipeline.

Итак, я изменил свой код для использования Response.AddHeader, что означает, что мои модульные тесты не пройдены. И так как я нахожусь в VB, я не вижу разумного способа отобразить вызов AddHeader в коллекцию Headers, поскольку Function () требуется возвращаемое значение в VB.

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

Кто-нибудь занимался этой конкретной ситуацией в VB, используя Moq?

1 Ответ

1 голос
/ 15 сентября 2009

Тьфу. Почему решения всегда становятся видимо ПОСЛЕ того, как вы публикуете. : -)

Это безобразно, но работает.

  • Подкласс HttpResponseBase.
  • Подделайте это и установите CallBase в True.

Затем переопределите Add / AppendHeader, чтобы сделать Headers.Add. Теперь вы можете увидеть любые варианты, которые люди используют в коде, так как все они попадают в коллекцию Response.Headers. Реальный код работает независимо от того, какой метод вы используете.

Не так чисто, как просто Moqing Add / Append в C # с обратными вызовами, но это работает.

Dim response As New Mock(Of CustomHttpResponse)
response.SetupGet(Function(r As HttpResponseBase) r.Headers).Returns(New NameValueCollection)
response.CallBase = True


Public Class CustomHttpResponse
    Inherits HttpResponseBase

    Public Overrides Sub AddHeader(ByVal name As String, ByVal value As String)
        Me.Headers.Add(name, value)
    End Sub
    Public Overrides Sub AppendHeader(ByVal name As String, ByVal value As String)
        Me.Headers.Add(name, value)
    End Sub
End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...