2016-12-06 1 views
2

FsCheck permet une coutume Arbitrary dans son intégration NUnit:Comment passer un Type en tant que paramètre d'attribut en utilisant la syntaxe F #?

[<Property(Verbose = true, Arbitrary= [typeof<Test.Arithmetic.MyArb>])>] 
static member MultiplyIdentity (x: int64) = x * 1 = x 

Cette syntaxe ne fonctionne pas. Je me sens un peu gêné de demander, mais apparemment je n'ai jamais eu besoin de ça auparavant: comment spécifier le type dans F # comme paramètre d'attribut? Microsoft says nothing about it, et le Wikibooks project et j'ai un peu de mal à googler cela (le mot type est omniprésent).

Remarque 1: le paramètre Arbitrary est de type Type [].

Répondre

4

Je pense que vous êtes proche, mais [1;2;3] crée un list<int>, vous voulez un littéral de tableau à l'aide [| 1;2;3 |]:

[<Property(Verbose = true, Arbitrary= [| typeof<Test.Arithmetic.MyArb> |])>] 
static member MultiplyIdentity (x: int64) = x * 1 = x 
+0

Oui, je ne montrais attention à ma liste syntaxe lors de l'écriture ma question. Vous avez raison, bien sûr, mais je me concentrais sur l'obtention du 'Type', et la copie de votre syntaxe est toujours lancée avec une erreur _" Ceci n'est pas une expression constante valide ou une valeur d'attribut personnalisée "_. Pouvez-vous reproduire ou cette syntaxe fonctionne-t-elle pour vous? – Abel

+1

Fonctionne ici: https://github.com/fscheck/FsCheck/blob/master/tests/FsCheck.Test/Runner.fs#L21 –

+0

Mon mauvais. La première erreur était cachée par l'erreur de l'info-bulle dans F #, et était _ "Le type 'MyArb' n'est pas défini" _ J'avais Tests.Arithmetic.MyArb', qui existe, mais apparemment en utilisant 'typeof', vous ne pouvez pas utiliser le FQN ??? De toute façon, quand je l'ai simplifié à 'typeof ' il "a juste fonctionné". Trompé par ma propre folie;). – Abel