Comment puis-je se moquer de cette méthode statique
J'ai ce code:
public static bool IsValidVoucher(string id)
{
//read tsv files
var temp1 = AppData.GetAppData("stringval");
//code that need to be tested
return true;
}
Et j'aime créer de test de l'unité, mais comment puis-je maquette AppData.GetAppData("stringval")
à ce que je veux de la valeur est, donc, je peux tester le reste du code.
La AppData classe est:
public class AppData
{
public static object GetAppData(string name)
{
//...
}
}
Au lieu de coder en dur 'AppData.GetAppData " on peut injecter une classe qui fait la lecture de la AppData et puis dans votre unité de test, de se moquer de la classe et d'installation de la valeur de retour dont vous avez besoin.
Moq pas possible sans modification du code source. Mais avec Typemock de l'Isolateur il est possible. Cependant Isolateur n'est pas libre.
Et ici quelques infos sur les moqueries des méthodes statiques. Et ici la réponse. HTH
double possible de Maquette statique de la propriété moq
J'ai abandonné ma réponse parce que je crois qu'il ne va pas aider dans ce scénario. De toute façon maintenant que vous connaissez l'expression, les arbres sont là pour vous aider beaucoup!
Moq pas possible sans modification du code source. Mais avec Typemock de l'Isolateur il est possible. Cependant Isolateur n'est pas libre.
Et ici quelques infos sur les moqueries des méthodes statiques. Et ici la réponse. HTH
double possible de Maquette statique de la propriété moq
J'ai abandonné ma réponse parce que je crois qu'il ne va pas aider dans ce scénario. De toute façon maintenant que vous connaissez l'expression, les arbres sont là pour vous aider beaucoup!
OriginalL'auteur Mr.Rendezvous | 2015-08-07
Vous devez vous connecter pour publier un commentaire.
Méthodes statiques ne peuvent pas être moqué de dans un moyen facile. En gros, vous avez deux choix:
Si vous possédez le
AppData
classe, changer la mise en œuvre pour implémenter une interface (par exemple,IAppData
) et retirer lestatic
modificateur sur laGetAppData
méthode pour s'en moquer.Si vous ne possédez pas le
AppData
classe, l'utilisation d'une classe wrapper (par exempleAppDataWrapper
) qui implémente une interface et appelez la méthode deIsValidVoucher
à la place:Vous pouvez ensuite l'unité de test
Foo
à l'aide Moq (à l'aide de xunit comme un exemple ici):Je dois dire que la méthode statique ne peut pas être moqué de facilement 😉 Édité pour plus de clarté
Je peux seulement dire lol
OriginalL'auteur rexcfnghk
Bien, je pense que tout le monde les commentaires de la mesure est techniquement correct - en utilisant quelque chose comme
RhinoMocks
ouMoq
, vous ne pouvez vraiment pas se moquer des méthodes statiques dans un facile, de façon simple.Mais en utilisant
Moles
, vous peut certainement. Donc, si vous avez significative (actuellement) invérifiables code qui résident dans les méthodes statiques, je pense que vous devriez être à la recherche dans les Taupes.(Ce lien date un peu mais je trouve toujours utile)
http://research.microsoft.com/en-us/projects/pex/molesmanual.pdf
(Texte)
Comment cela fonctionne: Supposons que vous avez une situation typique ressemble à ceci:
À l'aide de grains de beauté, votre test de code devrait ressembler à ceci:
Bien sûr, vous devez configurer les Taupes dans votre projet de test, alors assurez-vous de regarder beaucoup de ressources sur le web pour vous aider sur votre chemin.
Quelques messages utiles:
https://msdn.microsoft.com/en-us/library/ff798308.aspx
http://adventuresdotnet.blogspot.com/2011/03/mocking-static-methods-for-unit-testing.html
https://wannabeegeek.wordpress.com/2013/03/13/unit-testing-made-easy-with-moles-part-i/
Bon point, qui va faire en une heure ou deux.
Est Moles toujours pris en charge/disponible? Le site semble état que des Fakes vont la remplacer, et le assumable lien de téléchargement direct du moi pour une liste où les Taupes n'est pas là. J'ai peut-être raté le lien de téléchargement peut-être?
Voici actuel (VS 2017) docs sur MS Faux: docs.microsoft.com/en-us/visualstudio/test/... Malheureusement, Faux est disponible uniquement avec l'Entreprise SKU de Visual Studio: visualstudio.com/vs/compare Comme pour les grains de beauté, il semble que ce dernier a été pris en charge dans VS 2010: microsoft.com/en-us/research/project/...
OriginalL'auteur code4life