Создать массив Json с помощью FsCheck

Я новичок в FsCheck и мне нужен массив json для выполнения моих тестов.

Я хочу простое решение, подобное следующему:

let commaSeparated =  Gen.arrayOf Arb.generate<string> 
                      |> Gen.fold(fun (acc,i)-> i+="\",\"")
                      |> Gen.finalValueOf
                      |> StringExtensions.skipLastChar
let result = Arb.from "[\"" + commaSeparated +"\"]"

Но главная проблема в том, что я не могу найти Gen.fold а также Gen.finalValueOf,

1 ответ

Решение

Я также не эксперт по FsCheck, но я думаю, что в вашем коде происходят странные вещи, помимо отсутствующих функций. какой StringExtensions.skipLastChar делать? Тоже не думаю GenS могут быть объединены с stringкак будто ты пытаешься в последней строке. какой Gen.finalValueOf должен делать?

Я получил ваш пример работы (не уверен, что он делает то, что вам нужно) с помощью Gen.map чтобы объединить строки в список через запятую и заключить результат в квадратные скобки:

let jsonArray = 
    Arb.generate<string>
    |> Gen.arrayOf  
    |> Gen.map (String.concat "\",\"")
    |> Gen.map (fun strs -> "[\"" + strs + "\"]")

let result = Arb.fromGen jsonArray

Кстати: я думаю, что вы должны рассмотреть сгенерированные двойные кавычки. Если вы не избежите их, ваш анализатор JSON потерпит неудачу. Ниже приведена версия jsonArray это делает это:

let escapeDoubleQuotes (str:string) = str.Replace ("\"", "\\\"")

let jsonArray = 
    Arb.generate<string>
    |> Gen.arrayOf
    |> Gen.map (Array.map escapeDoubleQuotes)
    |> Gen.map (String.concat "\", \"")
    |> Gen.map (fun strs -> "[\"" + strs + "\"]")
Другие вопросы по тегам