2009-06-04 7 views
1

Je suis nouveau à moquer donc j'ai besoin d'un peu de conseils sur la façon de se moquer de HttpPostedFileBase avec Rhino Mocks. Je suis en train de vérifier que mon extension ToByteArray() fonctionne comme prévu, ce qui est ce que j'ai jusqu'à présent:Mocking HttpPostedFileBase avec Rhino Mocks

[Test] 
    public void Should_return_a_byte_array_with_a_length_of_eleven() 
    { 
     // Arrange 
     var stream = new MemoryStream(System.Text.Encoding.Default.GetBytes("TestContent")); 
     var httpPostedFileBase = MockRepository.GenerateMock<HttpPostedFileBase>(); 

     httpPostedFileBase.Expect(x => x.InputStream).Return(stream); 
     httpPostedFileBase.Expect(x => x.ContentLength).Return(11); 

     // Act 
     var byteArray = httpPostedFileBase.ToByteArray(); 

     // Assert 
     Assert.That(byteArray.Length, Is.EqualTo(11)); 
    } 

Je peux dire que les valeurs se préparent mais le temps que mon extensionmethod obtient le HttpPostedFileBase qu'il a perdu tout ce sont ses valeurs. Toute aide serait très appréciée.

/Kristoffer

Répondre

2

Autant que possible, vous devriez éviter moqueuse afin de vérifier que votre mise en œuvre est ce que vous attendez. Au lieu de cela, favorisez le test que pour une entrée particulière, la sortie est ce que vous attendez.

Cela dit, votre exemple manque quelques éléments clés. Lorsque vous utilisez simulacres, vous devez leur dire quand vous avez terminé la mise en place des attentes (sinon ils enregistreront tous les appels de méthode et suchlike que les attentes supplémentaires) en appelant:

httpPostedFileBase.Replay(); 

Et enfin au stade assert, vérifiez vos attentes avec:

httpPostedFileBase.VerifyAllExpectations(); 

Notez également qu'avec Rhino, vous pouvez uniquement simuler des méthodes et des propriétés virtuelles.

+0

Merci pour votre réponse! J'ai essayé mais je reçois toujours "Attendu: 11 Mais était: 0". J'ai mis Replay() avant que j'appelle ToByteArray() et VerifyAllExpectations() après ToByteArray(). J'ai déjà entendu votre argument à propos de la moquerie, mais je ne suis pas sûr de ne pas comprendre comment je pourrais vérifier cela d'une autre manière. Comment l'auriez-vous fait? –

+0

J'ai reçu vos suggestions après avoir configuré Repeat.Any() sur mes attentes. Cependant, je suis toujours intéressé par la façon dont vous auriez pu le faire différemment! –

+0

Si vous pouviez construire une instance réelle de HttpPostedFile (ou une dérivation de HttpPostedFileBase) avec du contenu de test, vous pouvez juste appeler la méthode d'extension sur cela. Mais je ne connais pas suffisamment la classe HttpPostedFile pour être sûr à 100% que c'est possible. – Rytmis

Questions connexes