Question

J'essaie d'être meilleur dans les tests unitaires de mon code, mais en ce moment j'écris beaucoup de code qui traite des systèmes distants.SNMP, WMI, ce genre de chose.Avec la plupart des cours, je peux créer des objets pour les tester, mais comment gérer les tests unitaires d'un système réel ?Par exemple, si ma classe sort et obtient l'objet Win32_LogicalDisk pour un serveur, comment puis-je le tester unitairement ?

Était-ce utile?

La solution

En supposant que vous vouliez dire « Comment puis-je tester des choses difficiles/impossibles à se moquer » :

Si vous avez une classe qui "sort et récupère l'objet Win32_LogicalDisk pour un serveur" ET fait autre chose (consomme l'objet 'Win32_LogicalDisk' d'une manière ou d'une autre), en supposant que vous souhaitiez tester les éléments de la classe qui consomment cet objet, vous peut utiliser Injection de dépendance pour vous permettre de vous moquer de l'objet 'Win32_LogicalDisk'.Par exemple:

class LogicalDiskConsumer(object):

    def __init__(self, arg1, arg2, LogicalDiskFactory)
        self.arg1=arg1
        self.arg2=arg2
        self.LogicalDisk=LogicalDiskFactory()

    def consumedisk(self):
        self.LogicalDisk.someaction()

Ensuite, dans votre code de test unitaire, transmettez un « LogicalDiskFactory » qui renvoie un objet fictif pour le « Win32_LogicalDisk ».

Autres conseils

Le moyen le plus simple de tester des éléments difficiles à simuler est de refactoriser le code de manière à ce que votre code (la logique qui mérite d'être testée) se trouve au même endroit et que les autres éléments que votre code utilise se trouvent dans des modules séparés.Le module est facile à simuler et vous pouvez ainsi vous concentrer sur votre logique métier.

Vous pouvez créer un ensemble de « talons de test » qui remplacent les routines principales de la bibliothèque et renvoient des valeurs connues, peut-être après des délais appropriés.

À titre d'exemple, j'ai récemment eu besoin de développer du code pour l'exécuter dans un produit tiers.Le défi était que notre « partenaire » se chargeait de la compilation et de l'intégration avec leur code de base :Je n'étais pas autorisé à Regarder leur code sous n'importe quelle forme !Ma stratégie consistait à créer un émulateur très simple qui faisait ce que je voulais pensée leur code l'a fait, sur la base des informations fournies par leurs ingénieurs.Nous avons utilisé un langage qui permettait de basculer facilement différents éléments de l'émulateur dans et hors de chaque version, ce qui m'a permis d'effectuer une quantité considérable de tests avant d'impliquer notre partenaire pour créer chaque nouvelle itération.

J'utiliserais à nouveau la même méthode, car les problèmes logiciels dans ce produit particulier sont d'un ordre de grandeur inférieurs à ceux de notre prochain produit le plus fiable !

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top