La technique de base pour moqueur est d'introduire une interface (si la conception actuelle ne dispose pas d'un) qui fournit des méthodes pour le service réel (la dépendance) qui est moqué. Le test teste que la classe sous test interagit correctement avec la dépendance. Correctement signifie ici qu'il fait ce que vous attendez de lui. Cela ne veut pas dire qu'il fait la bonne chose, car la bonne chose ne peut être déterminée que par un test d'intégration qui utilise les composants réels (ce que vous envisagez de faire en créant un vrai fichier).
Vous avez donc besoin d'une méthode sur la classe testée qui vous permette de transmettre une implémentation de cette interface. Le plus évident est via le constructeur. Vous avez le constructeur de production qui initialise la classe avec l'implémentation réelle de l'interface qui frappe le système de fichiers réel, puis en test, vous passez dans le simulacre au constructeur.
Dans le test, vous exécutez les méthodes sur la classe et affirment que l'interface a été appelée comme vous le souhaitez. Je noterai que le fait de venir après la création d'une classe et que les tests unitaires par mock ont une valeur limitée, mais cela aidera à verrouiller le comportement de sorte que les futurs changements dans la classe ne briseront pas les attentes de façon surprenante.
J'espère que cela vous aidera à démarrer.
Certains frameworks moqueurs prennent en charge des classes de béton réelles moqueuses, ce qui peut avoir beaucoup de sens dans les tests unitaires test-after (en interceptant les appels aux classes réelles et pas seulement les interfaces). Je ne pouvais pas trouver si EasyMock vous permet de faire cela, mais JDave est probablement l'endroit où aller si vous avez besoin de ce genre de fonctionnalité. Il vous permet même de vous moquer des classes finales.
Cela ressemble à ce que je cherche. Je dois jouer avec ça un peu avant de commenter davantage. Merci pour l'excellente direction. – Todd
Il semble que je devrais faire une sorte d'interface pour le fichier, car EasyMock nécessite un type d'interface pour se moquer d'une classe. Je vais vous laisser savoir comment ça se passe. – Todd
D'accord, de retour là où j'étais.Puisque je me moque seulement d'une interface, comment "écrire" à l'objet mocké, qui n'est plus de type Fichier, mais du type de l'interface? – Todd