Statique de la classe/méthode/propriété de l'unité de test, l'arrêter ou pas
Mise à jour
devrait statique de la classe/méthode/propriété d'être utilisé dans une unité de test environnement de développement, étant donné qu'il n'est aucun moyen de le tester sans l'introduction d'un wrapper qui n'est pas testable?
Un autre scénario est que, lorsque les membres statiques sont utilisés au sein de l'unité testée cible, la statique membre ne peut pas être bafoué. Ainsi, vous devez tester la statique meembers lorsque l'appareil testé cible est testé. Vous souhaitez isoler lorsque le membre statique effectue le calcul.
Vous devez vous connecter pour publier un commentaire.
Essai en statique méthode n'est pas différent que de tester une autre méthode. Avoir méthode statique comme un dépendance l'intérieur d'une autre des modules testés soulève des problèmes (comme il a été mentionné, vous ne pouvez pas se moquer/stub avec des outils libres). Mais si la méthode statique est lui-même l'objet de tests unitaires, vous pouvez simplement le traiter comme le travail, la fiabilité des.
Dans l'ensemble, il n'y a rien de mal (comme dans, elle ne perturbe pas les tests unitaires/ATS) avec des méthodes statiques lorsque:
Math.Floor
peut être considérée comme fiable - à l'aide, il ne devrait pas soulever "attention, il est statique!" l'avertissement; on peut supposer Microsoft fait son travail)Lorsque les méthodes statiques de causer des problèmes et doit être évitée? Fondamentalement, seulement quand ils interagissent avec/faire quelque chose que vous ne pouvez pas contrôler (ou maquette):
Edit: deux exemples lors de la méthode statique sera faire des tests unitaires dur
1
Comment traitez-vous avec
File.ReadAllText
? Cela va évidemment aller de système de fichiers à récupérer le contenu du fichier, qui est un grand non-non lors de tests unitaires. C'est l'exemple de la méthode statique avec dépendance externe. Pour éviter cela, vous avez l'habitude de créer un wrapper autour de système de fichiers de l'api ou simplement injecter comme la dépendance ou son délégué.2
Quoi à ce sujet? La Session est non-trivial de dépendance. Bien sûr, il pourrait venir comme
ISession
, mais comment la forceSessionFactory
de retour en moquer? Nous ne pouvons pas. Et nous ne pouvons pas créer facile à déterminez session d'objet non plus.Dans des cas comme ci-dessus, il est préférable d'éviter les méthodes statiques complètement.
Math.Floor
effectue des calculs - ne nous en moquer? Non, parce que nous savonsMath.Floor(2.5)
sera de retour 2. Lors de l'entrée-sortie est facile à déterminer vous n'avez pas à se moquer de quelque chose (ou de l'utilisation de l'instance). L'ensemble de la méthode statique test dur vient de situations où ils fournissent non-trivial de dépendances ou d'avoir des effets secondaires. Voir mon edit.Méthodes statiques PEUT être l'objet de tests unitaires. Ils ne peuvent pas être moqué (en général, il ya quelques cadres pour ce faire, comme Les taupes.
Vous ne pouvez pas se moquer des méthodes statiques/propriétés. Ainsi, lorsque votre
classA
utilise certains membre statique declassB
vous ne pouvez pas testerclassA
dans l'isolement.Mise à JOUR: je ne vois pas de problème d'emballage de certains statique de la classe d'objet. Il ne prend pas beaucoup de temps, mais il permet de diminuer le couplage dans votre système.
Techniquement, vous peut se moquer de la méthode statique en Java avec PowerMock, mais si vous avez besoin de faire cela, je ne vous recommande vivement de revoir votre code. Je pense que des méthodes statiques doivent toujours être
private
et utilisé uniquement à l'intérieur des classes qu'elles sont définies à des fins internes. Je considère exposé publiquement méthode statique comme une odeur de code.Je trouve cette menace, quel que soit le langage de programmation, mais depuis mon quotidien est lié à PHP, voici de bonnes ressources pour traiter avec des méthodes statiques sur PHP http://docs.mockery.io/en/latest/reference/public_static_properties.html