JustDummies

Juste des dummies, mais redoutablement efficaces.

Sections de la documentation

JD018 : NestedReproducibilityScope

PropriétéValeur
CatégorieReproductibilité (JustDummies.Reproducibility)
Sévérité🟠 Avertissement
Activée par défautOui

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 graineAny.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].

Lire la source, ou la corriger là-bas ouvre un nouvel onglet· Repris depuis lib-v1.0.0-preview.6