2009-09-15 2 views
0

VB에서 Moq을 사용하는 일부 사용자 지정 컨트롤러 주변에 테스트 힙을 작성하는 중입니다. 지금까지는 속성이나 메소드 만 moqed했기 때문에 VB Lambda의 단점을 처리 할 필요가 없었습니다.Moq, VB, HttpResponseBase 및 헤더

나는 오늘 아침까지 내 코드에 대해 카시니 (Cassini)를 사용하여 통합 테스트를 실행하려고합니다. Response.Headers.Add를 사용하여 머리글을 추가하는 코드가 있습니다. 나는 이것을 수행하여 Moq (Of HttpResponseBase)와 Headers-> NameValueCollection에 대한 SetupGet을 사용하여 유닛 테스트에서 헤더 콜렉션을 쉽게 얻을 수 있었다. 물론이 코드는 통합 파이프 라인 모드에서 IIS7 이외의 다른 기능을 수행합니다.

그래서 코드를 Response.AddHeader를 사용하도록 변경했습니다. 이는 내 단위 테스트가 실패 함을 의미합니다. 그리고 VB에서부터 Function()이 VB에서 반환 값을 필요로하기 때문에 AddHeader에 대한 호출을 헤더 컬렉션에 매핑하는 정상적인 방법을 볼 수 있습니다.

여기 Moq 및 VB에 대한 몇 가지 항목이 있지만 아무도 Subs를 Moq의 다른 항목에 매핑하는 문제가 없습니다.

누구도 VB에서 Moq을 사용하여이 특정 상황에 대처 했습니까?

답변

1

어. 게시 한 후에 솔루션이 항상 분명하게 나타나는 이유는 무엇입니까? :-)

이것은보기 흉하지만 작동합니다.

  • 서브 클래스 HttpResponseBase.
  • CallBase를 true로 설정하고 모의합니다.

그런 다음 Add/AppendHeader를 재정 의하여 Headers.Add를 수행하십시오. 이제 사람들이 Response.Headers 컬렉션에 포함되는 모든 변형을 코드에서 사용합니다. 실제 코드는 사용하는 방법에 관계없이 작동합니다.

Moqing만큼 깨끗하지는 않습니다. 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