当前位置: 首页 > 知识库问答 >
问题:

在UnitTest-Swift中找不到模块"MyApp"

商麒
2023-03-14

我试图在遗留的objc代码中测试一些Swift类(@objc class)。我正在测试类中导入“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

我清理了项目,检查了所有相关标志(“在Xcode单元测试中使用@testable时没有这样的模块”,不能在Objective-C中使用Swift类),删除了派生数据等等。。不知道发生了什么,但我很确定@import MyApp不应该出现在那里。。

有人能帮我吗?

共有3个答案

乜栋
2023-03-14

您可以添加Swift单元测试(只需创建一个新的单元文件,并通过. swft更改扩展名)。

从单元测试文件中,您可以使用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.
    }
  }
}
金何平
2023-03-14

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

濮阳征
2023-03-14

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

  • 在主目标中具有@obj属性的Swift协议
  • 继承了该协议的UnitTest target中的Swift类
  • 导入UnitTestTarget Swift。在UnitTest目标的任何Objective-C类中

所以相当简单的组合会导致这个错误。为了解决这个问题,您需要:

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

  • 不要将您的原始Swift协议标记为@obc,这将允许您从所有ObjecteC测试类中访问您的SwiftClass,但是这些类对Swift协议没有任何了解。
 类似资料:
  • 问题内容: 我有以下目录结构: 我尝试在从server.js导出的app.js中调用函数,我这样做: 但是得到错误: 我如何正确包含它? 谢谢。 问题答案: 该路径必须相对于您当前所在的文件。 用

  • 问题内容: 使用JDK / 11 的早期访问版本来编译基于Java-9且使用VM参数的现有代码 解决HTTP / 2客户端孵化器模块的问题 现在以编译错误结束 找不到模块:jdk.incubator.httpclient Java版本详细信息: 问题答案: 通过HTTP客户端API的标准化,现在可以删除已孵化的API。 现在,标准API的模块名称和软件包名称将 用作- 另外,将所有依赖类路径的应用

  • 在单元测试时,我得到了以下错误- 在对Run Configuration进行了一些调查之后,我们发现它在运行这个单元时使用了错误的模块(main.java.com.example.dexter.sunshine.app)。我们如何改变这个模块?

  • 问题内容: 大家好,我只是在学习烧瓶。我用pip来安装它。然后,当我运行此基本代码时,我得到一个错误。基本上,我看到它的工作,然后突然退出,并出现以下错误。这可能看起来是一些环境问题,但我不确定。前几天这很奇怪,现在却行不通。 问题答案: 您说过,仅当您从交互式shell运行代码时,才会出现此问题。它是由(wsgi服务器所基于的)功能引起的。 如果更改了项目文件,则在调试模式下将自动重新启动服务器

  • 问题内容: 我最近在计算机上安装了cx_Oracle模块,以连接到远程Oracle数据库服务器。(我身边没有Oracle客户端)。 Python:2.7 x86版 Oracle:版本11.1.X x64 Cx_Oracle:版本5.1.2-11g.win32-py2.7 然后,每次我运行脚本时,脚本都会失败并显示以下消息: ImportError:DLL加载失败:找不到指定的模块。 我想知道是否我

  • 问题内容: 我收到错误,无法在Node.js应用程序中找到模块“ bcrypt” 我尝试使用 npm install bcrypt 安装它, 但仍然出现问题。 错误信息: 问题答案: 使用命令无法为我解决问题。 我尝试了以下命令,但问题解决了。