2009-10-22 8 views
1

Comment pourrais-je me moquer d'une image avec Moq?Mocking System.Drawing.Image avec Moq

Il n'a aucun constructeur (est toujours généré à partir des méthodes d'usine).

Fondamentalement, je veux faire quelque chose comme ça ...

var image = new Mock<Image>(); 
image.Setup(i=>i.Save(someStream,ImageFormat.Jpeg); 
var testableObject = new ObjectUnderTest(image.Object); 

testableObject.MethodBeingTested(); 

image.VerifyAll(); 

Répondre

5

a répondu à une question semblable hier, vous voudrez peut-être jeter un oeil à this thread on mocking a static Singleton. S'il est absolument nécessaire de se moquer de ce comportement, la méthode proscrite consiste à générer une interface exposant les méthodes dont vous avez besoin, à l'implémenter avec une classe concrète [wrapping efficacement Image class] pour prod, et Mock l'interface pour test.

Cela semble trop, mais si vous avez besoin de Mock \ vérifier les interactions entre votre classe testable et Image, c'est la façon de le faire. Alternativement, vous pouvez simplement passer votre classe testable une instance réelle de l'image, puis comparer cette instance par rapport à une sortie attendue [méthodologie de test unitaire standard]

+0

Merci pour cela, votre réponse originale a été très utile. Cela semble un peu sale de créer une interface et un décorateur juste pour pouvoir le tester (surtout pour une classe de framework). Test de la sortie serait désordonné dans mon cas, car il serait la validation du contenu d'un flux ont les bons au revoir (fastidieux) –

+1

Je pense qu'une question importante à poser lors du test est "Qu'est-ce que je suis exactement tester?". Sans en savoir plus sur votre problème, je risque de deviner que vous testez une sorte de manipulation d'image. Strictement parlant, cette manipulation doit être testée indépendamment de l'image, par exemple un test de flux d'octets ou autre chose. Le test d'une classe "System" est généralement considéré comme trop exigeant - un peu comme tester WebServices, et j'en ai vu beaucoup aussi. On peut supposer que CLR est "sûr". Vous voulez séparer la logique métier [c.-à-d. Tout ce qui arrive à votre image] de la classe System [ie Image]. –

+0

http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx –