2017-12-31 52 views
3

FsCheck를 처음 사용하고 테스트를 수행하기 위해 json 배열이 필요합니다. 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.foldGen.finalValueOf을 찾을 수 있다는 것입니다.

답변

2

필자도 FsCheck에 대한 전문가가 아니지만 누락 된 기능을 제외하고 코드에서 이상한 일이 발생한다고 생각합니다. StringExtensions.skipLastChar은 무엇을하고 있습니까? 또한 나는 Gen이 마지막 줄에있는 것처럼 string과 연결할 수 없다고 생각합니다. Gen.finalValueOf은 무엇을해야하나요? 그런데

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

let result = Arb.fromGen jsonArray 

: 나는 쉼표로 구분 된 목록으로 문자열에 가입하고 괄호 안에 결과를 래핑하는 Gen.map을 사용 (당신이하는 것이 필요하지 있는지 확실하지 않습니다) 작업 귀하의 예제를 가지고

: 난 당신이 생성 된 이중 따옴표를 고려해야한다고 생각합니다. 이스케이프하지 않으면 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 + "\"]") 
+0

감사합니다. 원래 문자열 배열도 어떻게 반환 할 수 있습니까? 마침내 단언 할 때 필요합니다. – Mohsen

+0

여기에서 질문을 만들었습니다. https://stackoverflow.com/questions/48059352/how-to-generate-tuples-by-fscheck – Mohsen