9
votes

Comment définir une variable dans un objet simulé

Y a-t-il un moyen de définir une variable de niveau de classe dans un objet simulé?

J'ai le jeu d'objet simulé similaire à celui-ci: xxx

gagnez la classe réelle Il existe une variable qui doit être définie pour fonctionner correctement. Comment puis-je définir cette variable dans un objet mock?


0 commentaires

3 Réponses :


3
votes

L'idée d'un talon est de remplacer une dépendance avec un test double offrant la même interface de méthode (éventuellement) renvoie des valeurs de retour configurées. De cette façon, la SUT peut fonctionner avec le double comme c'était la dépendance. Si vous avez besoin d'une valeur de retour spécifique du talon, vous pouvez simplement le dire ce qu'il devrait revenir, par exemple: xxx

voir http://www.phpunit.de/manual/current/fr/Test-Doubles.html


6 commentaires

Je suppose que j'aurais dû faire l'exemple plus facile à comprendre. La classe est quelque chose de similaire à ceci: classe Someclass {$ quelque part; Fonction publique SetSemeVar (Couleur $ Bleu) {$ quelque partvar = "bleu"; } Fonction publique getomevar () {retour $ de quelque part; }} Dans l'objet simulé, je ne peux pas définir la variable, alors quand je l'utilise n'importe où ailleurs dans l'objet, je reçois une null ...


@Enrique hmm, votre ou moi ou moi ne l'obtient pas :) Vous pouvez dire à la maquette ce que cela devrait revenir lorsque vous le créez. Il n'est pas nécessaire de définir quoi que ce soit à l'intérieur. Si vous voulez qu'il retourne bleu, dites-le de retourner bleu.


@Gordon OK. Peut-être que je manque quelque chose. Laissez-moi essayer d'expliquer la situation que je suis sans dépasser trop de haricots. J'ai une méthode 'file d'attente' qui envoie des données sur une table. Pour faire exécuter une variable de niveau de classe, un moyen de transport doit être défini ou alors qu'il jette une erreur (pour ne pas savoir où aller). J'ai besoin de définir $ de transport à autre chose que NULL et le setter ne renvoie pas d'argument (il n'y a pas de getter pour la méthode de «file d'attente» à appeler. Son ancien code hérité ...)


@Enrique OK, mais comment la file d'attente sera-t-elle invoquée? Si cela jette une erreur, je suppose que vous déclenchez en quelque sorte le transport. C'est ce que tu me moquerais alors. Il est un peu difficile de comprendre cela sans voir de code réel. Peut-être n'importe quel de Sebastian-bergmann.de/archives/881-lesting-votre -Private.htm l aidera?


@Gordon Merci pour tout votre aide d'aide. Voici un exemple du code (Objets renommés et fonctionnalités de base déchirés pour des raisons IP, mais l'idée de ce que j'ai besoin de l'objet simulé à faire est là) ... pastebin.com/yp0faspb . C'est la classe que j'essaie de se moquer et sans la classe variable de classe, tout le faux objet ne fonctionnera pas ... J'espère que cela aide mon pote. :)


@Enrique, je ne l'obtiens toujours pas, mais si MyClass est la classe, vous voulez simuler (non test), puis Stubez la méthode SendObject () . Si cela n'est pas possible pour une raison quelconque, essayez de moquer $ staticclass à l'intérieur (voir les articles que j'ai liés précédemment). MyClass semble être juste une enveloppe pour elle quand même. Je suis désolé je ne peux pas vous donner une solution définie à cela. Vous voudrez peut-être envisager de refactoriser MyClass ou tout ce qui est à l'intérieur $ staticclass dans quelque chose de plus testable cependant.



6
votes

Je ne sais pas pourquoi cela fonctionne mais cela me semble pour moi. Si vous mettez la méthode Magic code> comme l'une des méthodes remplacées, par exemple

$mock->transport = 'smtp';


0 commentaires

18
votes

Voici ce qui fonctionne pour moi: xxx


1 commentaires

Je pense que c'est la réponse qui répond le plus simplement à la question posée. L'affiche demande des variables d'instance non des méthodes. Plusieurs autres réponses semblent se concentrer sur les méthodes. La réponse de NAT est la même que celle-ci, sauf que vous n'avez pas besoin de remplacer la méthode __get (au moins pas dans la dernière version)