2012-12-18 3 views
5

Ich habe die folgende Methode, die einen Stream in einem HttpResponse-Objekt schreibt.C# Wie bekomme ich einen Stream von httpResponse.BinaryWrite

Um es zu testen, muss ich den verarbeiteten Stream wiederherstellen. Gibt es eine Möglichkeit, den Stream vom httpResponse-Objekt zu lesen?

+0

Mock ein Httpresponsebase. – SLaks

+0

ist httpResponse außerhalb dieser Methode deklariert? –

+0

@betogrun: Welches spöttische Framework verwenden Sie zum Testen? –

Antwort

2

Ich habe zwei Ideen ... eine, um die HttpResponse zu verspotten, und die andere ist, einen Webserver zu simulieren.

1. Mocking Httpresponse

schrieb ich, bevor ich wusste, was Mockframework Sie verwendet haben. So können Sie Ihre Methode mit TypeMock testen.

Dies setzt voraus, dass Sie Ihre httpresponse Variable an die Methode übergeben, wobei das Verfahren wie folgt zu ändern:

public void ShowPDF(Stream stream, HttpResponse httpResponse) 

Natürlich können Sie diese es stattdessen auf eine Eigenschaft auf Ihrer Seite Objekt vorbei würde sich ändern, wenn es sich um ein Mitglied Ihrer Page-Klasse.

Und hier ist ein Beispiel dafür, wie man testen könnte eine gefälschte Httpresponse mit:

internal void TestPDF() 
{ 
    FileStream fileStream = new FileStream("C:\\deleteme\\The Mischievous Nerd's Guide to World Domination.pdf", FileMode.Open); 
    MemoryStream memoryStream = new MemoryStream(); 
    try 
    { 
     memoryStream.SetLength(fileStream.Length); 
     fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length); 

     memoryStream.Flush(); 
     fileStream.Close(); 

     byte[] buffer = null; 

     var fakeHttpResponse = Isolate.Fake.Instance<HttpResponse>(Members.ReturnRecursiveFakes); 
     Isolate.WhenCalled(() => fakeHttpResponse.BinaryWrite(null)).DoInstead((context) => { buffer = (byte[])context.Parameters[0]; }); 

     ShowPDF(memoryStream, fakeHttpResponse); 

     if (buffer == null) 
      throw new Exception("It didn't write!"); 
    } 
    finally 
    { 
     memoryStream.Close(); 
    }   
} 

2. Simulieren Sie einen Web-Server

Vielleicht können Sie dies tun, indem einen Webserver simuliert. Es mag verrückt klingen, aber es sieht nicht so aus, als wäre es so viel Code. Im Folgenden finden Sie einige Links zum Ausführen von Web Forms außerhalb von IIS.

Can I run a ASPX and grep the result without making HTTP request?

http://msdn.microsoft.com/en-us/magazine/cc163879.aspx

+0

Danke für deine Antwort Lost Hobbit, aber ich kann TypeMock nicht benutzen. Das einzige zugelassene Framowork, das ich benutzen darf, ist NMock. – betogrun

+1

@betogrun Schade ... vielleicht etikettieren Sie Ihren Post mit NMock ... vielleicht wird ein NMock-Experte ihn finden. –

+0

Sicher! Ich habe gerade den Post bearbeitet. Ich werde versuchen, Ihr Beispiel mit NMock anwenden Danke! – betogrun

Verwandte Themen