मेरे पास अधिक सामान्य प्रश्न है। स्पॉक का उपयोग करते समय Grails 2.x में मॉकिंग के लिए मुझे किस ढांचे या कार्यान्वयन का उपयोग करना चाहिए?स्पेल के साथ परीक्षण Grails - कौन सा मॉकिंग फ्रेमवर्क का चयन करें?
मुझे कई मॉकिंग शैली पता है: लीवरेज ग्रोवी मेटा क्लास, ग्रेल्स मॉकफोर(), ग्रोवी मॉक(), ग्रोवी क्लोजर स्टाइल इत्यादि। उनमें से प्रत्येक के अपने फायदे और नुकसान हैं। लेकिन मुझे समझ में नहीं आता है कि कुछ मजाकिया शैली कुछ अवसरों में काम करती है जिन्हें मैं निर्धारित नहीं कर सकता (यानी mockFor() कुछ कार्यान्वयन के लिए काम करता है, न कि दूसरों के लिए)।
वर्तमान में मेरे पास सेवा विधि मॉकिंग के दो समान कार्यान्वयन हैं।
यह एक काम करता है:
@TestFor(MyController)
@Mock([MyDevice])
class MyControllerSpec extends ControllerSpec {
void "test st."() {
def myService = mockFor(MyService)
myService.demand.myMethod() { def st ->
return "test"
}
controller.myService = myService.createMock()
}
}
हालांकि, इस कार्यान्वयन काम नहीं करता:
@TestFor(MyController)
@Mock([MyDevice])
class MyControllerSpec extends ControllerSpec {
void "test st."() {
def yourService = mockFor(YourService)
yourService.demand.yourMethod() { def st ->
return "test"
}
controller.yourService = yourService.createMock()
}
}
सेवा कार्यान्वयन और नियंत्रक से फोन कर काफी समान है। तो Grails में मज़ाक करने का सबसे अच्छा अभ्यास क्या है? या क्या Grails के लिए कोई अच्छा मजाकिया ढांचा है जो मेरे समय को नकल करने के बारे में पता लगाएगा?
किसी भी सलाह के लिए धन्यवाद! :-)
Mateo
क्या आपने स्पॉक के नकली ढांचे की कोशिश की है? यह वास्तव में स्पष्ट और सीधा है। स्पॉक डॉक्स का कहना है कि यह या तो स्पॉक मैक्स या ग्रोवी मैक्स के साथ काम कर सकता है, लेकिन किसी कारण से दो नकली ढांचे को गठबंधन करने की कोशिश न करें। –
हां, यह वास्तव में उपयोग किया जा रहा है जब आप mockFor() को कॉल करते हैं; grails.plugin.spock.UnitSpec.mockFor() कहा जाता है। जो मैंने सबसे उपयोगी पाया वह है कि मॉकिंग के साथ-साथ ग्रोवी क्लोजर के लिए सीधे मेटा क्लास प्रोग्रामिंग का उपयोग करना। इसके साथ एकमात्र समस्या यह है कि मेटा क्लास अन्य परीक्षणों में हस्तक्षेप कर सकता है जब आप इसे खतरे में विभाजित नहीं करते हैं। शायद Grails 2.3 बेहतर संस्करण लाएगा क्योंकि इस संस्करण के लिए स्पॉक डिफ़ॉल्ट होगा ... – kuceram
यदि उत्तर उचित है और आपकी अपेक्षाओं को पूरा करता है तो इसे दूसरों को अपने प्रश्न से सीखने में सहायता करने के लिए स्वीकार करें। – dmahapatro