swift2 在UnitTest-Swift中未找到模块“MyApp”

bq3bfh9z  于 2022-11-06  发布在  Swift
关注(0)|答案(4)|浏览(186)

我尝试在我的遗留Objc代码中测试一些Swift类(@objc类)。我正在我的测试类中导入“UnitTests-Swift. h”。
然后我得到这个错误:
在自动生成的“UnitTests-Swift.h”中未找到模块“MyApp”
这是“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 testsCan't use Swift classes inside Objective-C),删除了派生的数据等等。
有人能帮我吗?

ss2ws0br

ss2ws0br1#

在我的项目中刚遇到这个问题,经过一整天的调查,我终于解决了它。基本上,这是因为你在ObjC和Swift之间有循环依赖关系。所以在我的情况下,它是:

  • 主目标中具有@obj属性的Swift协议;
  • 继承此协议的UnitTest目标中的Swift类;
  • 在UnitTest目标的任何Objective-C类中导入UnitTestTarget-Swift.h

因此,相当简单的组合会导致此错误。为了修复此错误,您需要:

  • 只需确保UnitTest中的Swift类目标是private,这样它就不会到达UnitTestTarget-Swift.h

  • 不要将您的原始Swift协议标记为@objc,这将允许您从所有ObjectiveC测试类访问SwiftClass,但这些类将不了解Swift协议。
ffdz8vbo

ffdz8vbo2#

因为要测试的Swift类是MyApp的一部分,所以您应该在测试类中导入“MyApp-Swift. h”,而不是“UnitTests-Swift. h”。

c7rzv4ha

c7rzv4ha3#

您可以添加一个Swift单元测试(只需创建一个新的单元文件,并将扩展名更改为.swift)。
从这个单元测试文件中,你可以使用你的Swift类。
您也可以使用测试模块桥接头文件从Objective-C单元测试中导入该文件(反之亦然)。
这将是Swift单元测试文件的默认示例:

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.
    }
  }
}
ercv8c1e

ercv8c1e4#

此解决方案帮助我:
1.打开测试目标生成设置
1.搜索HEADER_SEARCH_PATHS
1.在名为“标题搜索路径”的行中,设置值$CONFIGURATION_TEMP_DIR/myProjectName.build/DerivedSources
1.清除并再次按Cmd+U
希望能有所帮助!
非常感谢这个article

相关问题