14

कोटलिन एक्सटेंशन फ़ंक्शन बहुत अच्छा है। लेकिन मैं उन पर यूनिट परीक्षण कैसे कर सकता हूं? खासकर एंड्रॉइड एसडीके की जो कक्षाएं कक्षा प्रदान करती हैं (जैसे संदर्भ, संवाद)।एंड्रॉइड एसडीके कक्षाओं पर कोटलिन एक्सटेंशन फ़ंक्शन पर यूनिट परीक्षण

मैं नीचे दो उदाहरण प्रदान करता हूं, और यदि कोई साझा कर सकता है कि मैं उन्हें कैसे परीक्षण कर सकता हूं, या अगर मुझे वास्तव में उन्हें यूनिट परीक्षण करना है तो मुझे उन्हें अलग-अलग लिखना होगा।

fun Context.getColorById(colorId: Int): Int { 
    if (Build.VERSION.SDK_INT >= 23) 
     return ContextCompat.getColor(this, colorId) 
    else return resources.getColor(colorId) 
} 

और

fun Dialog.setupErrorDialog(body : String, onOkFunc:() -> Unit = {}): Dialog { 
    window.requestFeature(Window.FEATURE_NO_TITLE) 
    this.setContentView(R.layout.dialog_error_layout) 

    (findViewById(R.id.txt_body) as TextView).text = body 
    (findViewById(R.id.txt_header) as TextView).text = context.getString(R.string.dialog_title_error) 
    (findViewById(R.id.txt_okay)).setOnClickListener{ 
     onOkFunc() 
     dismiss() 
    } 
    return this 
} 

कोई भी सुझाव में मदद मिलेगी। धन्यवाद!

+1

हाय, मुझे नहीं लगता कि आपको इन कार्यों को यूनिट-टेस्ट करने की आवश्यकता है। सबसे पहले, एंड्रॉइड संसाधनों से रंग मिलता है और यह आपके आवेदन कोड पर निर्भर नहीं करता है। दूसरा त्रुटि त्रुटि दिखाता है, आप एस्प्रेसो या रोबोटियम या अन्य यूआई परीक्षण ढांचे का उपयोग क्यों नहीं करते हैं यह जांचने के लिए कि क्या यह ठीक से प्रदर्शित होता है? – piotrek1543

+0

धन्यवाद piotrek। कोड सिर्फ उदाहरण के लिए है। प्रश्न का मुख्य सारांश यह पता लगाने के लिए है कि एक्सटेंशन फ़ंक्शन पर इकाई परीक्षण कैसे किया जा सकता है, यदि उसमें कुछ तर्क है तो परीक्षण करने की आवश्यकता है। क्या यह कुछ हासिल करने योग्य है, या मुझे कुछ याद आती है? धन्यवाद। – Elye

+0

मैं इसे भी ढूंढ रहा हूं। क्या आपने इसे @ एली पाया है? – elsennov

उत्तर

2

जिस तरह से मैं एंड्रॉइड कक्षाओं पर एक्सटेंशन कार्यों का परीक्षण कर रहा हूं, इस समय एंड्रॉइड क्लास का मज़ाक उड़ा रहा है। मुझे पता है, यह एक इष्टतम समाधान नहीं है क्योंकि यह कक्षा के तहत परीक्षण के लिए मेल करता है और फ़ंक्शन कैसे काम करता है (जैसा कि हमेशा मजाक करते समय यह होता है) के बारे में कुछ ज्ञान की आवश्यकता होती है, लेकिन विस्तार कार्यों को आंतरिक रूप से स्थिर कार्यों के रूप में कार्यान्वित किया जाता है, मुझे लगता है कि यह स्वीकार्य है जब तक कोई बेहतर कुछ नहीं आता है।

उदाहरण के रूप में JsonArray कक्षा पर विचार करें। हम पिछले आइटम के सूचकांक प्राप्त करने के लिए एक विस्तार समारोह परिभाषित किया है:

fun JSONArray.lastIndex() = length() - 1 

अनुसार परीक्षण (Spek परीक्षण ढांचे और mockito-kotlin का प्रयोग करके) इस तरह दिखता है।

@RunWith(JUnitPlatform::class) 
object JsonExtensionTestSpec : Spek({ 

    given("a JSON array with three entries") { 
     val jsonArray = mock<JSONArray> { 
      on { length() } doReturn 3 
     } 

     on("getting the index of the last item") { 
      val lastIndex = jsonArray.lastIndex() 

      it("should be 2") { 
       lastIndex shouldBe 2 
      } 
     } 
    } 

    given("a JSON array with no entries") { 
     val jsonArray = mock<JSONArray>({ 
      on { length() } doReturn 0 
     }) 

     on("getting the index of the last item") { 
      val lastIndex = jsonArray.lastIndex() 

      it("should be -1") { 
       lastIndex shouldBe -1 
      } 
     } 
    } 
}) 

आपके कार्यों के साथ कठिनाई यह है कि वे आंतरिक रूप से एंड्रॉइड कक्षाओं का भी उपयोग करते हैं। दुर्भाग्य से मेरे पास अभी इस के लिए कोई समाधान नहीं है।

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