Module “MyApp” not found in UnitTest-Swift
我试图在我的旧objc代码中测试一些swift类(@objc类)。我正在我的测试类中导入"unittests swift.h"。
然后我得到这个错误:
Module"MyApp" not found in the autogenerated"UnitTests-Swift.h"
这是"Unittests swift.h"顶部的内容
1 2 3 4 5 6 7 8 | 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 |
我清理了项目,检查了所有相关的标志("在xcode单元测试中使用@testable时没有这样的模块",不能在objective-c中使用swift类),删除了派生数据等。不知道会发生什么,但我很确定@import myapp不应该出现在那里。
有人能帮我吗?
在我的项目中刚刚得到这个问题,在花了一整天的时间进行调查之后,我终于解决了它。基本上,这是因为objc和swift之间存在循环依赖关系。所以在我的例子中是:
- 主目标中具有
@obj 属性的swift协议; - 继承此协议的UnitTest目标中的Swift类;
- 在UnitTest目标的任何Objective-C类中导入EDOCX1[2]
所以相当简单的组合会导致这个错误。要解决此问题,您需要:
- 只需确保你在UnitTest目标中的swift类是
private ,这样它就不会到达UnitTestTarget-Swift.h 。
或
- 不要将原来的Swift协议标记为
@objc ,这将允许您从所有客观性测试类访问Swift类,但这些类对Swift协议没有任何概念。
这个解决方案帮助我:
希望它有帮助!
多亏了这篇文章。
您可以添加一个Swift单元测试(只需创建一个新的单元文件并通过
从那个单元测试文件中,您可以使用您的swift类。
您还可以使用测试模块桥接头从Objective-C单元测试(和其他方法)中导入该文件。
这将是您的swift单元测试文件的默认示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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. } } } |
因为要测试的swift类是myapp的一部分,所以您应该在测试类中导入"myapp swift.h",而不是"unittests swift.h"。