2014-11-15 1 views
2

Мой код автоматически проверяет значения от -99 до 99 при использовании FsCheck.Проверка FsCheck изменяет диапазон значений, используемых для тестирования

Check.Quick test 

где моя тестовая функция принимает целые значения.

Я хотел бы проверить, используя значения от 1 до 4999.

+2

Я думаю, вы могли бы выполнить это создать свой собственный генератор: https://fsharp.github.io/FsCheck/TestData.html – Christian

+0

Спасибо за link :-) Исправлено! –

+0

вы должны либо удалить свой вопрос, либо развернуть его, чтобы мы могли сделать его полезным для будущего пользователя, тогда – Carsten

ответ

5

Вы можете использовать Gen.elements в сочетании с Prop.forAll:

let n = Gen.elements [-99..99] |> Arb.fromGen 
let prop = Prop.forAll n (fun number -> 
    // Test goes here - e.g.: 
    Assert.InRange(number, -99, 99)) 
prop.QuickCheck() 

Gen.elements принимает последовательность действительных значений и создает равномерный генератор от этой последовательности. Prop.forAll определяет свойство с помощью этого настраиваемого генератора.

Вы можете combine it with FsCheck's Glue Library for xUnit.net, что мой предпочтительный метод:

[<Property>] 
let ``Number is between -99 and 99``() = 
    let n = Gen.elements [-99..99] |> Arb.fromGen 
    Prop.forAll n (fun number -> 
     // Test goes here - e.g.: 
     Assert.InRange(number, -99, 99)) 
+1

Также рассмотрите возможность использования функции «Gen.choose» здесь - будет более эффективным (не выделяет список целых чисел). Но «Gen.elements» более просто обобщает на другие типы. –

0

По умолчанию FsCheck генерирует целые числа от 1 до 100. Вы можете изменить это путем подачи объекта Config на чеку.

let config = { 
    Config.Quick with 
    EndSize = 4999 
} 
Check.One(config,test) 

EndSize указывает размер, который необходимо использовать для последнего теста, когда все испытания проходят. Размер увеличивается линейно между StartSize, который вы также можете установить, если хотите генерировать тестовые данные в диапазоне от некоторого значения, отличного от 1, и от EndSize. См реализации type Config в https://github.com/fscheck/FsCheck/blob/master/src/FsCheck/Runner.fs

+0

Это несколько вводит в заблуждение. Размер представляет собой положительное целое число, которое ограничивает размер генерируемого типа, но каждый тип имеет свою собственную интерпретацию того, что означает размер. Для 'int' i это означает' abs (i) <= size'. Для списка это означает максимальную длину сгенерированного списка. И т. Д. –