Ошибка на примере FsUnit

Я скопировал этот пример со страницы проекта FsUnit:

open NUnit.Framework
open FsUnit
let [<Test>] trivial () = 1 |> should not (equal 2)

F# дает мне следующую ошибку:

Ошибка 2 Ожидалось, что это выражение будет иметь тип bool, но здесь имеет тип Constraints.EqualConstraint

Ошибка 1. Тип bool несовместим с типом Constraints.Constraint.

Что я делаю неправильно?


person Nick Heiner    schedule 05.06.2012    source источник
comment
Я не знаю FsUnit, но вы, кажется, забыли тестовую аннотацию: let [<Test>] trivial() = 1 |> should not (equal 2).   -  person pad    schedule 05.06.2012
comment
Кроме того, модульные тесты должны быть функциями, а не значениями. Не уверен, что это причина вашей ошибки, но вам не хватает (), который есть в примере пэда.   -  person Joel Mueller    schedule 06.06.2012
comment
да, я забыл обе эти вещи, когда начал печатать этот вопрос. Хороший улов.   -  person Nick Heiner    schedule 08.06.2012


Ответы (2)


Более новая версия FsUnit включает изменение, которое переименовывает функцию FsUnit.not в FsUnit.not'. Это должно устранить конфликт со встроенной функцией not. Вы можете получить последнюю версию в галерее NuGet. Примеры использования можно найти на сайте GitHub FsUnit.

Дайте мне знать, если вы все еще видите проблему. Я буду рад провести с вами более углубленное устранение неполадок.

person DANIEL MOHL    schedule 05.06.2012

Я думаю, что что-то не так с тем, как вы ссылаетесь на FsUnit. Я попытался запустить ваш код (просто скопируйте FsUnit исходный код из CodePlex), и он работал нормально. Вам все еще нужно написать свой тест как функцию (как указал Джоэл), поэтому напишите что-то вроде let [<Test>] trivial () = ....

По какой-то причине я думаю, что ваш скрипт использует встроенную функцию not (которая работает с bool значениями) вместо функции FsUnit.not, которая работает с Constraint объектами. Будет ли это работать, если вы явно используете функцию not из FsUnit?

let cnot = FsUnit.not
let [<Test>] trivial = 1 |> should cnot (equal 1) 
person Tomas Petricek    schedule 05.06.2012