... sans savoir si "se moquer" est le bon mot.
Quoi qu'il en soit, j'ai une base de code héritée pour laquelle j'essaie d'écrire des tests qui sont basés sur le temps. J'essaie de ne pas être trop vague, le code est lié à l'examen de l'historique d'un élément et à la détermination du fait que cet élément a maintenant basé un seuil de temps.
À un moment donné, je dois également tester l'ajout de quelque chose à cet historique et vérifier que le seuil est maintenant modifié (et, évidemment, correct).
Le problème que je rencontre est qu'une partie du code que je teste utilise des appels à time() et j'ai donc beaucoup de mal à savoir exactement quel devrait être le seuil de temps, étant donné que je ne sais pas exactement quand la fonction time() va être appelée.
Ma question est donc la suivante : existe-t-il un moyen pour moi d'outrepasser l'appel time(), ou d'une manière ou d'une autre de simuler l'heure, de sorte que mes tests fonctionnent dans un "temps connu" ?
Ou dois-je simplement accepter le fait que je vais devoir faire quelque chose dans le code que je teste, pour me permettre de le forcer à utiliser une heure particulière si nécessaire ?
D'une manière ou d'une autre, existe-t-il des "pratiques communes" pour développer des fonctionnalités sensibles au facteur temps qui soient faciles à tester ?
Modifier : Une partie de mon problème, aussi, est le fait que le moment où les choses se sont produites dans l'histoire affecte le seuil. Voici un exemple d'une partie de mon problème...
Imaginez que vous avez une banane et que vous essayez de savoir quand elle doit être mangée. Disons qu'elle expire dans les 3 jours, à moins qu'elle n'ait été pulvérisée avec un produit chimique, auquel cas nous ajoutons 4 jours à la date d'expiration, à partir du moment où le spray a été appliqué . Ensuite, nous pouvons ajouter 3 mois supplémentaires en le congelant, mais s'il a été congelé, nous n'avons qu'un jour pour l'utiliser après sa décongélation.
Toutes ces règles sont dictées par des chronologies historiques. Je conviens que je pourrais utiliser la suggestion de Dominik de tester en quelques secondes, mais qu'en est-il de mes données historiques ? Devrais-je simplement les "créer" à la volée ?
Comme vous pouvez le constater ou non, j'essaie toujours d'appréhender ce concept de "test" ;)
1 votes
Pour PHP7, vous pouvez utiliser github.com/runkit7/Timecop-PHP qui est basé sur runkit7