0
votes

Tests d'unité d'écriture avec aléatoire

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


0 commentaires

4 Réponses :


1
votes

Pour que ce code soit testable, il y a deux choses qui comptent:

  • Vous voulez simuler une simulation d'une manière ou d'une autre. Ce Article vous indique comment vous pouvez le faire en Java 8 en utilisant la classe d'horloge
  • Lorsqu'il est aléatoire, utilisez simplement une graine < / fort>. Ce qui vous permet de "prédire" les nombres aléatoires qui apparaîtront dans votre code de production.

    En d'autres termes: vous pouvez contrôler l'heure et le nombre aléatoire que votre code de production verra!

    Alternativement, simple délégué tout le calcul dans quelque chose que vous pouvez facilement simuler, tels que: xxx

    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.

    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 . graines.


3 commentaires

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) 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.



0
votes

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);


0 commentaires

1
votes

La solution la plus simple consiste à ajouter un nouveau paramètre contenant ce nombre aléatoire à vos méthodes: xxx

Vous pouvez simplement tester generateurl (double r) méthode facilement . Vous n'avez pas besoin de tester generateurl () méthode car il est trivial.


0 commentaires

0
votes

S'il est vrai que vous ne connaissez pas la sortie exacte 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 au lieu d'une instance spécifique dans laquelle vous éliminez le hasard.

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.


0 commentaires