2013-03-26 1 views
2

Je connais un ASP MVC, essayant d'embrasser TDD. Les exemples suivants sont installés ici xUnit et TestDriven (qui inclut Moq).Mock une image upload viewmodel

Le problème est que j'essayais de simuler un modèle de vue de téléchargement d'image pour que je puisse affirmer qu'il est en train d'être téléchargé.

Moq m'a donné problème:

configuration non valide sur un membre

tout en essayant de

var imageMock = new Mock<ImageViewModel>(); 
imageMock.Setup(x => x.IsUrl).Returns(true);` 

non virtuelle (Overridable en VB) Je ne suis pas sûr de savoir comment continuez - c'est un non-sens de créer des interfaces pour un modèle de vue, je suis la programmation pour le site, pas pour tester l'environnement. Dois-je remplacer l'environnement Mock ou définir une interface ou ...?

S'il vous plaît donner quelques conseils expérimentés et informatifs et s'il vous plaît fournir ou au moins aimer de bons échantillons à ce que vous me conseillez de faire.

Merci!

Répondre

1

Tout d'abord, s'agit-il d'une propriété auto?

public bool IsUrl {get; set;} 

Si oui, définissez vous-même la valeur dans la configuration de votre test. Si ce n'est pas une propriété auto, cela a-t-il plus de sens de la déplacer dans une méthode plutôt que dans une propriété. Et à ce moment-là, vous pourriez rendre la méthode virtuelle (ce que le message d'erreur dit en réalité).

Lorsque vous vous moquez, vous ne pouvez pas vous moquer des choses qui ne sont pas des interfaces ou qui ne sont pas virtuelles (je crois qu'il y a . certains ont payé se moquant des bibliothèques qui vous permettent, mais FakeItEasy, Moq et d'autres exigent qu'il soit virtuel)

pour ce faire, vous simplement besoin de faire le look de la propriété comme ceci:

public virtual bool IsUrl {get; set;} 

en second lieu, Que testez-vous sur votre modèle de vue? Tester les getters et les setters est en grande partie une perte de temps car ils seront probablement testés dans d'autres endroits de votre code. De plus, les tests sur les getters et les setters testent le compilateur, pas votre code. Si les getters et setters ne fonctionnent pas dans .NET, vous avez toute une série de problèmes. Il serait préférable de tester la création de votre modèle de vue, puis assurez-vous qu'il a les bonnes valeurs après la création.

+1

C'est une propriété de l'automobile et c'est une bonne prise pour juste utiliser l'objet putain, pourquoi se moquer de lui? :) Vous avez complètement raison ... Je regardais juste les exemples et a été emporté avec eux, les gens se moquent de tout, je pensais que c'était le chemin à parcourir. Je ne suis pas tester getter/setters, je ne suis pas payé par MS à QA leur CLR et framework .NET. Ce que je vérifie, c'est que l'image que je mentionne est effectivement téléchargée par la méthode censée les télécharger. Laissez-moi faire ce que vous avez dit (tout a un sens) et je reviendrai. Merci pour votre réponse rapide! –