Dans mon previous question Kurt m'a indiqué this code of FsCheck pour définir le type Arbitrary
.Utilisation de FsCheck avec NUnit: réception d'une exception sur l'utilisation de types arbitraires (ou: comment utiliser des types arbitraires avec des attributs)
J'ai le suivant Arbitrary
(avertissement: je n'ai aucune idée de ce que je fais ..., toujours trouver FsCheck notoirement difficile à comprendre, mais je suis prêt à le faire fonctionner), ce qui est en soi une simplification version de quelque chose que je créé précédemment:
type MyArb() =
inherit Arbitrary<DoNotSize<int64>>()
override x.Generator = Arb.Default.DoNotSizeInt64().Generator
et je l'utilise comme indiqué:
[<Property(Verbose = true, Arbitrary= [| typeof<MyArb> |])>]
static member MultiplyIdentity (x: int64) = x * 1L = x
Cela me donne un (peu d'espoir) un message d'erreur qui me manque quelque chose:
System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation.
----> System.Exception : No instances found on type Tests.Arithmetic.MyArb. Check that the type is public and has public static members with the right signature.
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at FsCheck.Runner.checkMethod(Config config, MethodInfo m, FSharpOption`1 target) in C:\Users\Kurt\Projects\FsCheck\FsCheck\src\FsCheck\Runner.fs:line 318
at FsCheck.NUnit.Addin.FsCheckTestMethod.runTestMethod(TestResult testResult) in C:\Users\Kurt\Projects\FsCheck\FsCheck\src\FsCheck.NUnit.Addin\FsCheckTestMethod.fs:line 100
En repensant à ce code Github, je vois deux classes Atrbitrary
mais pas d'héritage et elles ont toutes deux des membres statiques différents.
Comment puis-je créer un générateur de nombres aléatoires et l'assigner de manière arbitraire à mes tests NUnit?
si simple? Donc pas d'héritage, d'attributs etc? Essayer ... _ (edit: essayé, fonctionne instantanément, merci!) _ – Abel
J'ai mis à jour la réponse avec quelques explications. –
Merci pour l'explication supplémentaire, il est logique. Cependant, 'static member m()' n'est jamais appelé (j'ai essayé avec une instruction 'printfn' juste pour être sûr). Cela pourrait bien être un bug FsCheck (plus probablement mon bug;), mais comme écrit ci-dessus, il ne frappe jamais. – Abel