При использовании FsCheck функция propertyCheck НЕ распознается

Функция «propertyCheck», на которую ссылается мой тестовый метод, НЕ распознается, когда я пытаюсь создать свой тест.

Я думал, что propertyChecked — это основная функция фреймворка FsCheck?

Какую еще церемонию мне нужно провести?

module Tests.Units

open FsUnit
open NUnit.Framework
open NUnit.Core.Extensibility

open FsCheck.NUnit
open FsCheck.NUnit.Addin

let add x y = (x + y)

let commutativeProperty x y = 
    let result1 = add x y
    let result2 = add y x // reversed params
    result1 = result2

[<Test>]
let ``When I add two numbers, the result should not depend on parameter order``()=
    propertyCheck commutativeProperty |> should equal true

person Scott Nimrod    schedule 29.11.2015    source источник
comment
Используйте Check.Quick вместо propertyCheck.   -  person Functional_S    schedule 29.11.2015
comment
С чего вы взяли, что в FsCheck есть функция propertyCheck?   -  person Mark Seemann    schedule 29.11.2015
comment
@ScottNimrod эта функция определена в этом посте: во-первых, мы напишем функцию с именем propertyCheck...   -  person Mauricio Scheffer    schedule 29.11.2015
comment
Ааа... Спасибо, что показали мне это.   -  person Scott Nimrod    schedule 29.11.2015


Ответы (1)


Как пишет @Functional_S в комментарии, вы можете использовать Check.Quick, хотя вы должны понимать, что Check.Quick только сообщает результаты теста; оно не «проваливается», если свойство оказывается фальсифицируемым. В наборе модульных тестов Check.QuickThrowOnFailure является лучшим вариантом, потому что, как следует из названия, он выдаст ошибку.

Поскольку похоже, что вы пытаетесь запустить свойства из среды модульного тестирования, такой как NUnit, вам следует вместо этого использовать одну из библиотек Glue для FsCheck:

Это позволит вам писать свойства, используя атрибут [<Property>]:

[<Property>]
let ``When I add two numbers, the result should not depend on parameter order``x y =
    let result1 = add x y
    let result2 = add y x // reversed params
    result1 = result2

Из-за плохой расширяемости API для NUnit вы можете избавить себя от многих проблем, используя xUnit.net вместо NUnit.

person Mark Seemann    schedule 29.11.2015