Создать массив 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
делать? Тоже не думаю Gen
S могут быть объединены с 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 + "\"]")