2017-08-02 11 views
8

ऑब्जेक्ट्स एक्सेस करने के लिए परीक्षण ओवरहेड कम करें, एक स्लिक डीएओ जिसमें कार्यों को वापस करने वाले कार्यों और संग्रहीत प्रकार की ऑब्जेक्ट्स शामिल हैं। उदाहरण:डीएओ में एक्शन

def findByKeysAction(a: String, b: String, c: String = { 
    Users.filter(x => x.a === a && x.b === b && x.c === c).result 
} 

def findByKeys(a: String, b: String, c: String): Future[Option[foo]] = { 
    db.run(findByKeysAction(consumerId, contextId, userId)).map(_.headOption) 
} 

सूचना कैसे गैर कार्रवाई आधारित समारोह db.run() में अन्य गिर्द घूमती है।

दोनों कार्यों का परीक्षण करने और कोड की अनावश्यकता को कम करने के लिए ठोस दृष्टिकोण क्या है?

मैं बेवकूफ तरीका निश्चित रूप से उनके व्यक्तिगत परीक्षण सेटअप के साथ परीक्षण करने के लिए हो सकता है (ऊपर एक साधारण उदाहरण है; डीबी प्रतिबंधों को पूरा करने के लिए बहुत सारे परीक्षण सेटअप की आवश्यकता हो सकती है)।

उत्तर

5

ध्यान दें कि गैर-क्रिया-आधारित फ़ंक्शन दूसरे को db.run() में कैसे लपेटता है।

नहीं

वास्तव में। आपकी findByKeys विधि findByUserIdAction पर कॉल नहीं करती है, इसलिए मैं इस उत्तर में उस मामूली विस्तार के लिए समायोजन कर रहा हूं।


def findByUserIdAction(userId: String) = { 
    Users.filter(_.userId === userId).result 
} 

ऊपर कोड एक DBIOAction देता है। documentation राज्यों के रूप में:

बस एक प्रश्न की तरह, एक आई/ओ कार्रवाई एक ऑपरेशन का केवल एक वर्णन है। क्रियाएं बनाना या लिखना डेटाबेस पर कुछ भी निष्पादित नहीं करता है।

जहां तक ​​स्लिम का उपयोगकर्ता चिंतित है, DBIOAction के लिए कोई सार्थक परीक्षण नहीं है, क्योंकि स्वयं ही यह कुछ भी नहीं करता है; यह केवल एक नुस्खा है जो कोई करना चाहता है। ऊपर DBIOAction पर अमल करने के लिए, आप materialize के पास है, जो है क्या निम्नलिखित है:

def findByUserId(userId: String): Future[Option[User]] = { 
    db.run(findByUserIdAction(userId)).map(_.headOption) 
} 

materialized परिणाम क्या आप परीक्षण करना चाहते है। ऐसा करने का एक तरीका ScalaTest की ScalaFutures विशेषता का उपयोग करना है।

"Users" should "return a single user by id" in { 
    findByUserId("id3").futureValue shouldBe Option(User("id3", ...)) 
} 

अधिक उदाहरण के लिए इस Slick 3.2.0 test project पर एक नज़र डालें: विशेष रूप से, TestSpec और QueryCoffeesTest उदाहरण के लिए, एक कल्पना है कि उस विशेषता में घुलमिल में, आप की तरह कुछ हो सकता था।

संक्षेप में, अलगाव में DBIOAction का परीक्षण करने की कोशिश करने से परेशान न हों; बस इसके भौतिक परिणाम का परीक्षण करें।

+0

मेरे कोड उदाहरण को ठीक किया और कुछ शोर को हटा दिया। असुविधा के लिए खेद है यदि आपके पास समय है तो कृपया तदनुसार अपना कोड अपडेट करें। धन्यवाद! –

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