2016-12-06 68 views
2

FsCheck允許其NUnit的集成定製Arbitrary如何使用F#語法將Type作爲屬性參數傳遞?

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

這句法不起作用。我覺得有點不好意思問,但顯然我從來沒有需要這樣做:你如何在F#中指定類型作爲屬性參數?微軟says nothing about it,也沒有Wikibooks project和我在谷歌搜索這個(類型字無處不在)有一些麻煩。

注1:Arbitrary參數類型爲Type []

回答

4

我覺得你很接近,但[1;2;3]創建一個list<int>,你想用[| 1;2;3 |]文字的數組:

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

是的,寫我的問題,當我沒有表現出關注我的列表語法。當然,你是正確的,但我實際上專注於獲取'Type',並且複製你的語法仍然拋出_「這不是一個有效的常量表達式或自定義屬性值」_錯誤。你可以repro或者這個語法適合你嗎? – Abel

+1

這裏工作:https://github.com/fscheck/FsCheck/blob/master/tests/FsCheck.Test/Runner.fs#L21 –

+0

我的壞。第一個錯誤被F#中的工具提示隱藏,並且是_「類型'MyArb'未定義」_我有'Tests.Arithmetic.MyArb',它存在,但顯然在使用'typeof'時,不能使用FQN?無論哪種方式,當我將它簡化爲「typeof 」時,它「剛剛工作」。被我自己的愚蠢愚弄;)。 – Abel

相關問題