2015-11-13 10 views
13

में नहीं मिला है, मैं अपने विरासत ओबीजेसी कोड में कुछ स्विफ्ट क्लास (@objc क्लास) का परीक्षण करने की कोशिश कर रहा हूं। मैं अपने टेस्ट क्लास में "यूनिटटेस्ट्स-स्विफ्टएचएच" आयात कर रहा हूं।मॉड्यूल "MyApp" यूनिटटेस्ट-स्विफ्ट

तब मैं इस त्रुटि मिलती है:

Module "MyApp" not found in the autogenerated "UnitTests-Swift.h"

यह "UnitTests-Swift.h"

परियोजना
typedef int swift_int3 __attribute__((__ext_vector_type__(3))); 
typedef int swift_int4 __attribute__((__ext_vector_type__(4))); 
#if defined(__has_feature) && __has_feature(modules) 
@import XCTest; 
@import ObjectiveC; 
@import MyApp; 
@import CoreData; 
#endif 

मैं साफ कर के शीर्ष भाग के अंदर क्या है, सभी प्रासंगिक झंडे जाँच ("No such module" when using @testable in Xcode Unit tests, Can't use Swift classes inside Objective-C), व्युत्पन्न डेटा हटा दिया गया है और इसी तरह .. क्या हो रहा है इसका कोई विचार नहीं है, लेकिन मुझे पूरा यकीन है कि @import MyApp वहां नहीं होना चाहिए ..

सी कोई भी इस से मेरी मदद करता है?

+0

मुझे यह समस्या भी है। – Uncommon

+0

अनुरोध करके, मैंने इसे स्विफ्ट बग डेटाबेस में दायर किया है: https: //bugs.swift।संगठन/ब्राउज़/एसआर -3381 – Uncommon

+1

क्या ऐसा कुछ है जिसे एक्सकोड 7 में पुन: उत्पन्न किया जा सकता है, या क्या इसे पुराने संस्करण के साथ एक ओबीजे-सी प्रोजेक्ट की आवश्यकता है? क्या आप स्क्रैच से पुन: पेश करने के लिए कदम प्रदान कर सकते हैं? – charmingToad

उत्तर

0

क्योंकि स्विफ्ट क्लास का परीक्षण किया जाना है MyApp का हिस्सा है, आपको "यूनिट-स्विफ्ट.h" के बजाय परीक्षण कक्षाओं में "MyApp-Swift.h" आयात करना चाहिए।

-1

आप एक स्विफ्ट यूनिट परीक्षण जोड़ सकते हैं (बस एक नई इकाई फ़ाइल बनाएं और द्वारा एक्सटेंशन बदलें)।

उस इकाई परीक्षण फ़ाइल से आप अपने स्विफ्ट कक्षाओं का उपयोग कर सकते हैं।

और आप टेस्ट मॉड्यूल ब्रिजिंग हेडर का उपयोग करके उस उद्देश्य को अपने उद्देश्य-सी इकाई परीक्षणों (और दूसरी तरफ) से भी आयात कर सकते हैं।

और यह अपने स्विफ्ट इकाई परीक्षण फ़ाइल के लिए डिफ़ॉल्ट उदाहरण होगा:

import XCTest 
@testable import MyApp 

class MyAppSwiftTests: XCTestCase { 

    override func setUp() { 
    super.setUp() 
    // Put setup code here. This method is called before the invocation of each test method in the class. 
    } 

    override func tearDown() { 
    // Put teardown code here. This method is called after the invocation of each test method in the class. 
    super.tearDown() 
    } 

    func testExample() { 
    // This is an example of a functional test case. 
    // Use XCTAssert and related functions to verify your tests produce the correct results. 
    } 

    func testPerformanceExample() { 

    // This is an example of a performance test case. 
    self.measure { 
     // Put the code you want to measure the time of here. 
    } 
    } 
} 
1

बस मेरी परियोजना में इस समस्या को मिला है और पूरे जांच पर खर्च दिन के बाद मैं अंत में यह संकल्प लिया। असल में ऐसा इसलिए होता है क्योंकि आपके पास ओबीजेसी और स्विफ्ट के बीच चक्रीय निर्भरता है। तो मेरे मामले में यह था:

  • @obj के साथ स्विफ्ट प्रोटोकॉल मुख्य लक्ष्य में विशेषता;
  • यूनिटटेस्ट लक्ष्य में स्विफ्ट क्लास जो इस प्रोटोकॉल को विरासत में मिला;
  • आयात UnitTestTarget-Swift.h अपने unittest के किसी भी ऑब्जेक्टिव-सी क्लास में लक्षित कर

तो काफी सरल संयोजन इस त्रुटि की ओर जाता है। आदेश में इस को ठीक करने में आप चाहते हैं या तो:

  • बस सुनिश्चित करें कि आपके unittest में स्विफ्ट कक्षा लक्ष्य private है, इसलिए करने के लिए UnitTestTarget-Swift.h

या

  • कर यह नहीं मिलेगा अपने मूल स्विफ्ट प्रोटोकॉल को @objc के रूप में चिह्नित न करें, जो आपको सभी ऑब्जेक्टिव परीक्षण कक्षाओं से अपने स्विफ्ट क्लास तक पहुंचने की अनुमति देगा, लेकिन उन वर्गों को स्विफ्ट प्रोटोकॉल के बारे में कोई जानकारी नहीं होगी।
संबंधित मुद्दे