JustDummies

Juste des dummies, mais redoutablement efficaces.

Sections de la documentation

JD005 : GeneratorRenderedAsText

PropriétéValeur
CatégorieUsage (JustDummies.Usage)
Sévérité🔴 Erreur
Activée par défautOui

Un générateur est une recette immuable, pas une valeur — et aucun générateur JustDummies ne surcharge ToString(). Le rendre sous forme de texte produit donc le nom de type CLR du constructeur : $"{Any.String()}" donne littéralement la chaîne "JustDummies.AnyString".

Cette chaîne est non vide, plausible, et identique à chaque exécution. Elle se propage dans le message, la charge utile ou l’objet valeur sous test comme s’il s’agissait d’une valeur arbitraire : le test passe au vert tout en exerçant une constante qui ne varie pour personne — exactement l’inverse de la raison d’être d’Any. Rien n’avertit : la conversion est du C# légal.

Matérialisez la valeur avec Generate().

Non conforme

string message   = $"order {Any.String().NonEmpty()}";        // JD005 : « order JustDummies.AnyString »
string reference = "ORD-" + Any.String().NonEmpty();          // JD005
string quantity  = Any.Int32().Positive().ToString();         // JD005 : « JustDummies.AnyInt32 »

Conforme

string message   = $"order {Any.String().NonEmpty().Generate()}";
string reference = "ORD-" + Any.String().NonEmpty().Generate();
string quantity  = Any.Int32().Positive().Generate().ToString();

Ce qui n’est pas signalé

  • Une valeur générée — Generate() retourne la valeur, et la rendre est précisément l’objectif.
  • Un générateur écrit par le consommateur qui surcharge réellement ToString() : l’appel se résout vers cette surcharge et non vers object.ToString(), et il est délibérément laissé tranquille.
  • Une surcharge ToString(...) prenant un format ou une culture — ce n’est jamais object.ToString().

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