J'essaie de tester le comportement d'une méthode pour générer une URL avec quelques paramètres. La méthode utilise une méthode d'assistant qui utilise à son tour de nouveau aléatoire (). Nextdouble () code>.
1. Main()
2. generateChecksum()
3. generateUrl(params, checksum)
4. return URL
4 Réponses :
Pour que ce code soit testable, il y a deux choses qui comptent:
En d'autres termes: vous pouvez contrôler l'heure et em> le nombre aléatoire que votre code de production verra! p> Alternativement, simple délégué em> tout le calcul dans quelque chose que vous pouvez facilement simuler, tels que: p> MAINTENANT, vous pouvez facilement vous moquer de cette classe et que cela retourne tout ce que vous voulez de retourner . Sans penser à des horloges ou de nombres aléatoires. P> Mais gardez à l'esprit: la définition d'une graine peut toujours être une bonne idée, et idéalement, vous voudrez peut-être utiliser un numéro aléatoire Secure em>. graines. p> p>
Je ne ferais pas simuler l'horloge système. En fin de compte, le problème est que les méthodes statiques appelle à la classe. Vous résolvez cela en tirant sur les appels de méthode statiques.
@Michael a amélioré ma réponse autour de cette idée.
L'utilisation de l'horloge (comme alternative à la modification de l'horloge système) nécessite quelques modifications, mais c'est bien. Et pour nouveau aléatoire (42) code> identique. En fait, des tests d'unité sont les cas d'utilisation prévus pour ces constructions. Bonne vous a ajouté le changement de moqueur d'utilisation de l'horloge et aléatoire.
Vous ne pouvez pas tester quelque chose lorsque les résultats ne sont pas connus à l'avance.
Vous devez injecter la source de aléatoire comme une dépendance afin que vous puissiez fournir des constantes de vos tests. P>
new MyClass(() -> 10.0);
La solution la plus simple consiste à ajouter un nouveau paramètre contenant ce nombre aléatoire à vos méthodes: Vous pouvez simplement tester generateurl (double r) code> méthode facilement . Vous n'avez pas besoin de tester
generateurl () code> méthode car il est trivial. P> p>
S'il est vrai que vous ne connaissez pas la sortie exacte em> de la méthode à l'aide d'un composant aléatoire, je ne pense pas qu'il soit nécessaire de tester pour une sortie exacte, mais plutôt pour le bon Format de la sortie, c'est-à-dire valider que la sortie est une URL valide em> au lieu d'une instance spécifique dans laquelle vous éliminez le hasard. P>
Bien sûr, la sortie peut réussir cette vérification par hasard, mais en cueillant une graine spécifique, vous rencontrez essentiellement dans le même problème. P>