| Propriété | Valeur |
|---|---|
| Catégorie | Reproductibilité (JustDummies.Reproducibility) |
| Sévérité | 🟠 Avertissement |
| Activée par défaut | Oui |
Les deux mécanismes rapportent une instruction de rejeu, et l’imbrication rend celle de l’extérieur fausse.
Any.Reproducibly prend sa graine de Guid.NewGuid().GetHashCode() — et non de la source ambiante — de sorte qu’une portée interne ignore ce que l’externe a épinglé et tire à neuf à chaque exécution. Le lanceur externe, ou [Reproducible], rapporte pourtant sa graine. L’échec dit donc « rejouez avec la graine N », et rejouer avec N ne reproduit rien.
C’est une instruction fausse plutôt qu’un résultat faux, et c’est ce qui justifie de la signaler : le lecteur lui fait confiance et perd du temps avant d’en douter.
Non conforme
[Fact, Reproducible]
public void It_is_accepted() {
Any.Reproducibly(() => { /* ... */ }); // JD018 : la graine de l'attribut ne gouverne rien ici
}
Conforme
[Fact, Reproducible]
public void It_is_accepted() {
/* ... */ // l'attribut épingle déjà tout le test
}
Ce qui n’est pas signalé
- La surcharge avec graine —
Any.Reproducibly(1234, ...). Épingler une graine choisie à l’intérieur est délibéré, et celui qui l’écrit sait quelle graine gouverne quoi. - Un lanceur isolé dans un test qui ne porte aucun
[Reproducible].