2011-08-09 5 views
5

मैं अब कुछ दिनों के लिए स्कालाटेस्ट के फ़ीचरस्पेक का उपयोग कर रहा हूं और मैं समझने की कोशिश कर रहा हूं कि अंतर्निहित मैचर्स (और यदि नहीं, मैं एक उपयुक्त कस्टम मैचर कैसे लिख सकता हूं) का उपयोग करके निम्न spec को परिभाषित करना संभव है। ।ScalaTest में संग्रह तत्वों के लिए हैप्रोपर्टी मैटर का उपयोग करना?

मान लीजिए मैं कक्षा बुक है:

case class Book(val title: String, val author: String) 

और अपने परीक्षण में मैं पुस्तकों की एक सूची है: अब

val books = List(Book("Moby Dick", "Melville")) 

, मैं निर्दिष्ट करने के लिए है कि किताबें सूची एक को शामिल करना चाहिए चाहते हैं शीर्षक "मोबी डिक" के साथ किताब।

books should contain (value with title "Moby Dick") 

मैं अगर यह ScalaTest में इस आवश्यकता को व्यक्त करने के लिए संभव है डॉक्स और कोड से यह पता लगाने की प्रतीत नहीं कर सकते हैं: मैं की तरह कुछ लिखने के लिए करना चाहते हैं। क्या कोई भी इसी तरह की स्थिति में भाग गया है?

उत्तर

2

वर्तमान में नहीं, हालांकि आप भविष्य में जल्द ही ऐसा कुछ करने में सक्षम होंगे।

def containElement[T](right: Matcher[T]) = new Matcher[Seq[T]] { 
    def apply(left: Seq[T]) = { 
    val matchResults = left map right 
    MatchResult(
     matchResults.find(_.matches) != None, 
     matchResults.map(_.failureMessage).mkString(" and "), 
     matchResults.map(_.negatedFailureMessage).mkString(" and ") 
    ) 
    } 
} 

तो फिर तुम क्षेत्रों का निरीक्षण करने के ScalaTest Have मिलान का संपूर्ण उपयोग कर सकते हैं:

books.exists(_.title == "Moby Dick") should be (true) 
+0

मैं इस सुविधा के लिए प्रतीक्षा नहीं कर सकता! मुझे उम्मीद है कि यह मामलों को संभालता है जैसे: 'पुस्तकों में केवल शामिल होना चाहिए (_.title प्रारंभ होना चाहिए ("मोबी"), _.अधिकृत नहीं होना चाहिए ("मेलविले")) ' – Steiny

2

इस दौरान यहां कस्टम आप उपयोग कर सकते हैं Matcher है: क्या तुम अब क्या कर सकते हैं की तरह कुछ है अपने वस्तु की:

:

val books = List(Book("Moby Dick", "Melville"), 
       Book("Billy Budd", "Melville"), 
       Book("War and Peace", "Tolstoy")) 

books should containElement(have('title("Moby Dick"))) 
books should containElement(have('title("Billy Budd"), 'author("Melville"))) 
books should containElement(have('title("War and Peace"), 'author("Melville"))) 

पिछले एक इस उत्पादन का उत्पादन एक विफलता है

ऑब्जेक्ट बुक (मोबी डिक, मेलविले) पर शीर्षक की संपत्ति "युद्ध और शांति" के बजाय शीर्षक संपत्ति "मोबी डिक" का मूल्य था और शीर्षक संपत्ति के मूल्य "बिली बड" के मूल्यवान मूल्य के बजाय मूल्य था "युद्ध और शांति", वस्तु बुक पर (बिली बड, मेलविल) और लेखक संपत्ति है, इसकी उम्मीद मूल्य "मेलविल" के बजाय मूल्य "टॉल्स्टॉय" था, वस्तु बुक (युद्ध और शांति, टालस्टाय)

पर आप and या or के साथ मैचर्स को भी जोड़ सकते हैं, not, आदि

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