2016-03-09 4 views
5

मैं स्विफ्ट के साथ एक आईओएस ऐप का निर्माण कर रहा हूं जो ब्लूटूथ लो एनर्जी के माध्यम से परिधीय के साथ संवाद करने के लिए सेब के कोरब्लूटूथ फ्रेमवर्क का उपयोग करता है। जो CBCentralManagerDelegate और CBPeripheralDelegate प्रोटोकॉल, मैं CoreBluetooth एपीआई के व्यवहार की नकल करने के लिए एक परीक्षण डबल CBCentralManager से subclassed प्रदान कर रहा हूँ लागू करता है एक कस्टम नियंत्रक परीक्षण इकाई के प्रयास में। नियंत्रक के प्रतिनिधि कॉलबैक उचित समय पर बुलाए जाते हैं।यूनिट परीक्षणों में अनुपलब्ध प्रारंभकर्ताओं के साथ कोको वस्तुओं को मजाक करना

अभी तक यह बहुत अच्छी तरह से काम कर रहा है। लेकिन जब यह CBPeripheralDelegate कॉलबैक बुला की बात आती है, एक CBPeripheral में पारित होने के लिए मैं सिर्फ नकली घटक अपने खुद के उपवर्ग प्रदान करने या का एक उदाहरण CBPeripheral नकली होगा की जरूरत है। आमतौर पर,।

यहाँ पकड़ है: नामित अंतर्निहित ऑब्जेक्टिव-सी पुस्तकालय में CBPeripheralके प्रारंभकर्ता जो मुझे मेरे नाटक किया CBCentralManager में एक CBPeripheral instantiating और करने के लिए एक तर्क के रूप में यह पारित करने से रोकता है अनुपलब्ध के रूप में चिह्नित किया गया है परीक्षण के तहत सीबीपीरफेरल डिलेगेट। (एक्सकोड मुझे एक कंपाइलर त्रुटि के साथ छोड़ देता है।)

अब तक मैंने अपने नकली उपclass (जो काम नहीं करता है क्योंकि मुझे अंततः अनुपलब्ध नामित init को कॉल करना है) में एक कस्टम प्रारंभकर्ता प्रदान करने का प्रयास किया है, प्रारंभकर्ता को ओवरराइड करना एक्सटेंशन (जिसे स्पष्ट रूप से अनुमति नहीं है) और ऑब्जेक्टिव-सी रनटाइम के साथ चयनकर्ता (init) को कॉल करना जैसे कि मैं एक छल नहीं देता कि यह अनुपलब्ध है। अंतिम दृष्टिकोण सबसे आशाजनक प्रतीत होता है, लेकिन वास्तव में काम नहीं कर रहा है और मुझे गलत प्रकार (मेरी टेस्ट क्लास) की अप्रबंधित वस्तुओं के साथ छोड़ देता है।

मैं निश्चित रूप से एक अवरोध यहां तक ​​पहुंचते हैं और() init के बावजूद एक CBPeripheral instantiating अनुपलब्ध जा रहा है

  • एक अलग दृष्टिकोण

    1. पर किसी भी निवेश के लिए बेहद खुशी होगी इकाई परीक्षण के लिए सीबीपीरफेरल डिलेगेट

  • उत्तर

    2

    मैं ओबीजेसी-रनटाइम विचार का पीछा करके और उद्देश्य-सी में ऑब्जेक्ट फैक्ट्री बनाने के द्वारा स्वयं समस्या को हल करने में कामयाब रहा, जो अनुपलब्ध चिह्न को अनदेखा करने के लिए प्रारंभकर्ता के कार्यान्वयन को अपने सूचक द्वारा कार्यान्वित करता है।

    अधिक जानकारी के लिए देखें: http://ijoshsmith.com/2014/06/05/instantiating-classes-by-name-in-swift/ (यह वर्तमान स्विफ्ट में अब और काम नहीं कर रहा है, लेकिन आसानी से अनुकूलित किया जा सकता)

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