2017-08-15 18 views
7

के संघीय क्षेत्रों के भेदभाव के लिए गैर-लक्षण स्टिंग उत्पन्न करने के लिए फोर्स फ़ेसैक I FSCheck के साथ निम्न व्यवहार प्राप्त करने का प्रयास कर रहा हूं: मैं एक जनरेटर बनाना चाहता हूं जो MyUnion प्रकार का उदाहरण उत्पन्न करेगा, प्रत्येक स्ट्रिंग फ़ील्ड गैर- -null/खाली।फोर्स एफएस चेक प्रकार स्ट्रिंग

type MyNestedUnion = 
    | X of string 
    | Y of int * string 

type MyUnion = 
    | A of int * int * string * string 
    | B of MyNestedUnion 

मेरे 'असली' प्रकार बहुत बड़ा/MyUnion से अधिक गहरा है, और FsCheck किसी भी समस्या के बिना एक उदाहरण उत्पन्न करने में सक्षम है, लेकिन संघ के मामलों की स्ट्रिंग क्षेत्रों कभी कभी खाली हैं। (उदाहरण के लिए यह B (Y (123, "")) उत्पन्न हो सकता है)

शायद FsCheck के NonEmptyString को संयोजित करने और मनमाने ढंग से यूनियन प्रकारों को उत्पन्न करने के लिए इसका समर्थन करने का कुछ स्पष्ट तरीका है जो मुझे याद आ रही है?

सही दिशा में किसी भी सुझाव/पॉइंटर्स की सराहना की गई।

धन्यवाद!

उत्तर

5

यह (जो में आप स्पष्ट रूप से बनने से मान्य परीक्षण मामलों को रोकने के), लेकिन आप गैर रिक्त स्ट्रिंग जनरेटर ऊपर तार कर सकता है सभी स्ट्रिंग्स के लिए प्रयोग की जाने वाली संपत्ति आधारित परीक्षण के अनाज के खिलाफ जाता है:

type Alt = 
    static member NonEmptyString() : Arbitrary<string> = 
     Arb.Default.NonEmptyString() 
     |> Arb.convert 
      (fun (nes : NonEmptyString) -> nes.Get) 
      NonEmptyString.NonEmptyString 

Arb.register<Alt>() 

let g = Arb.generate<MyUnion> 

Gen.sample 1 10 g 

ध्यान दें कि मैपिंग वैश्विक होने के बाद से परीक्षण के बाद आपको डिफ़ॉल्ट जनरेटर को फिर से पंजीकृत करने की आवश्यकता होगी।

एक और अधिक से-पुस्तक समाधान डिफ़ॉल्ट व्युत्पन्न जनरेटर का उपयोग करने के लिए और फिर मान जो अवैध स्ट्रिंग से युक्त फ़िल्टर कर (अर्थात ==> का उपयोग करें) हो सकता है, लेकिन आप इसे विशेष रूप से गहरी नेस्टेड प्रकार के लिए संभव नहीं हो सकता है।

संबंधित मुद्दे