JustDummies

Juste des dummies, mais redoutablement efficaces.

Sections de la documentation

JD014 : RejectedConstantArgument

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

L’argument est une constante de compilation que la garde du générateur refuse : l’appel lève à chaque exécution. Rien n’est décidé à l’exécution qui ne le soit déjà au site d’appel — pourtant l’échec ne se manifeste que lorsque cette ligne d’arrangement s’exécute, souvent au fond d’un utilitaire partagé par de nombreux tests, où il se lit comme un problème de bibliothèque plutôt que comme la faute de transposition qu’il est le plus souvent.

Between(10, 5) est l’archétype : les deux paramètres sont des int, les deux ordres compilent, et l’erreur survit à la relecture parce que l’appel se lit plausiblement.

Non conforme

Any.Int32().Between(10, 5)                    // le minimum doit être ≤ au maximum — transposés
Any.String().WithLengthBetween(10, 5)         // idem
Any.String().WithLength(-1)                   // une taille ne doit pas être négative
Any.String().WithLength(2_000_000)            // au-delà de la plus grande taille productible
Any.String().WithMaxLength(2_000_000)         // un plafond oriente le tirage aussi, donc il est plafonné également
Any.Int32().MultipleOf(0)                     // le multiple doit être strictement positif
Any.Decimal().WithScale(29)                   // l'échelle doit être dans [0, 28]
Any.String().StartingWith("")                 // le fragment ne doit pas être vide
Any.String().WithChars("")                    // le pool de caractères ne doit pas être vide
Any.String().OneOf()                          // au moins une valeur est requise
Any.DateTime().WithGranularity(TimeSpan.Zero) // la granularité doit être strictement positive

Conforme

Any.Int32().Between(5, 10)
Any.String().WithLength(12)
Any.Int32().MultipleOf(7)
Any.String().StartingWith("ORD-")

Portée

Une règle sur une table, plutôt qu’une règle par méthode : la bibliothèque valide tout cela au même endroit, avec une seule forme de message, et un lecteur qui a compris « une constante que la garde refuse » les a toutes comprises. La table reproduit exactement SizeGuard et les gardes propres à chaque générateur — là où elle ne peut pas être certaine, elle se tait.

Ce qui n’est pas signalé

  • Un argument non constant. C’est l’affaire de la garde d’exécution, et elle la conserve : cette règle n’anticipe que le sous-ensemble déjà visible du compilateur.
  • Un test négatif vérifiant un conflit — Check.ThatCode(() => Any.Int32().Between(10, 5)) — où l’appel illégal constitue tout le corps d’une lambda passée en argument. Ce dépôt en écrit des centaines.
  • Une méthode homonyme portée par un type qui n’est pas un générateur JustDummies.
  • Containing(item) sur une collection, qui n’est pas la surcharge chaîne.

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