2016-12-06 4 views
2

FsCheck позволяет обычай Arbitrary в интеграции NUnit:Как передать параметр типа как атрибута с помощью синтаксиса F #?

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

Этот синтаксис не работает. Я чувствую себя немного неловко, чтобы спросить, но, по-видимому, мне это никогда не понадобилось: как вы указываете тип в F # как параметр атрибута? Microsoft 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

Да, я не показывал внимание к моему списку-синтаксису при написании моего вопроса. Конечно, вы правы, но я действительно фокусировался на получении «Тип», и копирование вашего синтаксиса все еще бросается с _ «Это не допустимое значение константного выражения или значение настраиваемого атрибута» _. Можете ли вы воспроизвести или использовать этот синтаксис для вас? – Abel

+1

Работает здесь: https://github.com/fscheck/FsCheck/blob/master/tests/FsCheck.Test/Runner.fs#L21 –

+0

Мой плохой. Первая ошибка была скрыта ошибкой всплывающей подсказки в F # и была _ «Тип« MyArb »не определен» _ У меня был 'Tests.Arithmetic.MyArb', который существует, но, видимо, при использовании' typeof' вы не можете использовать FQN ??? В любом случае, когда я упростил его, 'typeof ' it 'просто работал ". Одурачивается моей собственной глупостью;). – Abel

Смежные вопросы