2010-08-25 5 views
11

Je regardais récemment une webdiffusion sur Clojure. Dans ce document, le présentateur a fait un commentaire dans le contexte de la discussion sur la nature de la PF de Clojure qui est allé quelque chose comme (j'espère que je ne le déforme pas) "Les objets simulés se moquent de vous".Programmation des fonctions et objets Mock

J'ai également entendu un commentaire similaire il y a quelque temps lorsque j'ai regardé une webémission lorsque Microsoft Reactive Framework commençait à apparaître. Il est allé quelque chose comme "Les objets simulés sont pour ceux qui ne connaissent pas les mathématiques")

Maintenant je sais que les deux commentaires sont des blagues/langue-en-tête etc etc (et probablement mal paraphrasé), mais sous-jacente est évidemment quelque chose de conceptuel que je ne comprends pas car je n'ai pas vraiment fait le déplacement vers le paradigme de la PF. Donc, je serais reconnaissant si quelqu'un pourrait expliquer si FP rend en fait redondant moqueur et si oui comment.

+5

Dans FP, l'objet se moque de VOUS!/meme – delnan

Répondre

8

En FP pur, vous disposez de fonctions de référence transparentes qui calculent la même sortie chaque fois que vous les appelez avec la même entrée. Tout l'état dont vous avez besoin doit donc être explicitement transmis en tant que paramètres et en tant que résultats de fonction, il n'y a pas d'objets avec état qui sont en quelque sorte "cachés derrière" la fonction que vous appelez. Ceci, cependant, est ce que font généralement vos objets simulés: simuler un état ou un comportement caché externe sur lequel se fonde votre sujet testé. En d'autres termes: OO: Vos objets combinent l'état et le comportement associés. Pure FP: L'état est quelque chose que vous passez entre les fonctions qui sont elles-mêmes sans état et ne dépendent que d'autres fonctions sans état.

+0

OK. THX. Mais probablement l'état étant passé entre les fonctions autour pourrait être dans des objets fictifs ou des «objets réels» afin que les objets fictifs seraient alors encore appropriés pour tester une solution FP - non? –

+0

En FP pur, il n'y a pas d'objets au sens OO. Il existe des structures de données, qui peuvent être définies par l'utilisateur. Dans certaines langues, il existe des familles d'interfaces distantes: Haskell a des classes de types, qui sont essentiellement un ensemble de fonctions qui doivent être définies pour chaque type de données dans cette classe de type. Donc oui, vous pouvez écrire votre fonction pour opérer sur les types de données d'une certaine classe de type et la tester sur un autre type de données que celui que vous utilisez en production. En F # ou Scala, où vous pouvez réellement manipuler .NET ou Java-objets dans un style fonctionnel, il peut même être nécessaire d'utiliser des objets fantaisie réels. – Christoph

8

Je pense que la chose importante à penser est l'idée d'utiliser des tests pour vous aider à structurer votre code. Les simulacres consistent en réalité à différer des décisions que vous ne voulez pas prendre maintenant (et une technique largement mal comprise). Au lieu de l'état de l'objet, considérez les fonctions partielles. Vous pouvez écrire une fonction qui fait dévier une partie de son comportement vers une fonction partielle transmise. Dans un test unitaire, il peut s'agir d'une fausse implémentation qui vous permet de vous concentrer uniquement sur le code en main. Plus tard, vous composez votre nouveau code avec une implémentation réelle pour construire le système.

En fait, lorsque nous avons développé l'idée de Mocks, j'ai toujours pensé à Mocks de cette façon. La partie de l'objet était accessoire.

Questions connexes